• [AI大赛] 2020BDC华为云大数据挑战赛官方信息汇总帖
    1、热身赛赛题Baseline2、ModelArts学习资料及案例3、[非常重要]代金券及ModelArts体验规格使用4、学信网在线验证码忘记填写怎么办5、如何获取学籍验证号码(16或12位)6、实名认证失败解决帖7、赛事报名和组队说明8、大赛已解决典型问题汇总☞学AI,就上  huaweicloud.ai !☜
  • [上云迁移] 大数据迁移这些小事,如何做到迁移大数据到MRS
    看了这个,也能自己动手做大数据集群的数据迁移了,so easy~参考博文:离线大数据迁移到MRS(一)迁移到MRS前准备  https://bbs.huaweicloud.com/blogs/160949离线大数据迁移到MRS(二)数据迁移到MRS集群网络连通说明 https://bbs.huaweicloud.com/blogs/161141离线大数据迁移到MRS(三)通过CDM迁移HDFS数据到华为云MRS服务 https://bbs.huaweicloud.com/blogs/161144离线大数据迁移到MRS(四)Hive数据迁移到华为云MRS服务    https://bbs.huaweicloud.com/blogs/163269离线大数据迁移到MRS(五)HBase数据迁移到华为云MRS服务 https://bbs.huaweicloud.com/blogs/163312后续博客快马加鞭更新中~
  • [热门活动] 【济南HDZ】HiLens AI 开发平台应用直播交流会 及 HiLens 新功能抢先预告!!!
    2020年4月25日 下午14:00济南HDZ 将举办一场《 HiLens AI 开发平台应用直播交流会》并抢先发布HiLens 新功能精彩回放及新功能申请地址:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=52697&page=1&extra=#pid179454看直播享受福利:福利一:本次直播邀请了【HiLens Studio 的设计师】 ,在直播间留言区在线答疑福利二:看直播参与互动答题,有机会获得HDZ定制数据线~福利三:微信扫码入群后,可️直播期间申请5月份新功能公测名额!直播链接地址:https://huaweicloud.bugu.mudu.tv/watch/6oelzrxm<看直播参与互动送礼品>直播期间,讲师分享结束后,HDZ小助手根据本次直播内容提出2-3个问题,线上观众,留言回答。前三个回答正确的用户,每人将获得“HDZ定制数据线1份”小助手将在留言板,宣布获奖用户,用户自行截图作为获奖凭证。 <获奖规则>1、 同一个账号只能获奖一次,不能重复获奖。2、 添加“HDZ小助手”微信:扫描海报上的二维码 。3、 回复小助手:获奖凭证、姓名、联系方式、收货地址等。4、用户完成登记后,10个工作日内包邮寄出。5、逾时3天未登记将视为自动弃奖。----------目前【济南HDZ】开发者社区正式成立!!!志愿者火热招募中,期待您的加入~发感兴趣的朋友欢迎加入到HDZ的大家庭!!!济南HDZ报名通道:https://333786.weixin.drip.im/form/detail/281cf3d6-daef-42d3-9516-b676be247897?special=333786【 济南HDZ 公众号 】HDZ社区—携手全球开发者 共建开放、创新、多元的开发者社区组织       HDZ是Huawei Developers Zone的英文缩写,是华为开发者生态面向全球开发者建立开放、创新、多元的开发者社区组织。      致力于帮助开发者学习提升、互动交流、挖掘机会,推动ICT、互联网等产业生态的建立和发展。      对云计算、IoT、人工智能、5G、区块链、鲲鹏、昇腾、软件开发与运维、开源等各技术领域感兴趣的开发者、软件工程师、创业者、运营人、产品人、大学生、老师等都可以参与到HDZ。      HDZ秉承开放、创新、多元的社区文化,完全由各地HDZ组织者、志愿者自发组建和领导。华为公司不直接参与HDZ组织建设和领导,只按需对HDZ社区活动提供必要的方向指导、资源支持、活动支撑等,并为各地HDZ组织者提供与全国组织者互动交流的机会。【全国各城市核心组织者报名通道】
  • [技术干货] [大数据] 鲲鹏生态-ELK Stack 7.5.1软件部署
    ELK Stack包括 Elasticsearch、Kibana、Beats 和 Logstash,是一套实时数据收集,存储,索引,检索,统计分析及可视化的解决方案。最新版本已经改名为Elastic Stack,并新增了Beats项目。其中Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架,很多时候我们简称Elasticsearch为es。Logstash是ELK的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。Kibana可以将elasticsearch的数据通过友好的页面展示出来,提供实时分析的功能。1 环境要求硬件平台                表1-1 搭建 ELK Stack 的服务器硬件配置名称描述TaiShan   200 2280 1 台处理器Kunpeng 920 4826 内存16*32G 2666 系统盘1.2T  软件环境                表1-2 搭建 ELK Stack 的软件环境名称描述获取地址操作系统CentOS   7.6.1810 N/A AdoptOpenJ DK 12   https://github.com/AdoptOpenJDK/openjdk12binaries/releases Node.js v10.15.2   https://nodejs.org/dist/ Elasticsearch 7.5.1   https://www.elastic.co/cn/downloads/elasticsear   ch Logstash 7.5.1   https://www.elastic.co/cn/downloads/logstash Kibana 7.5.1   https://www.elastic.co/cn/downloads/kibana 2 前置条件(1)预装 CentOS 7.6 操作系统。(2)配置网络环境,使服务器能够连接互联网(尽量不要使用代理),本例中节点主机名:osd3,IP:172.170.75.15。3 获取软件包步骤 1 创建普通用户 elastic,加入 sudo 权限,并切换普通用户 elastic 目录下。[root@osd3 ~] useradd elastic [root@osd3 ~] echo "elastic ALL=(ALL)       ALL" >> /etc/sudoers [root@osd3 ~] su - elastic步骤 2 下载 ELK Stack 软件包。[elastic@osd3 ~] wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.5.1linux-x86_64.tar.gz  [elastic@osd3 ~] wget https://artifacts.elastic.co/downloads/kibana/kibana-7.5.1-linuxx86_64.tar.gz  [elastic@osd3 ~] wget https://artifacts.elastic.co/downloads/logstash/logstash-7.5.1.tar.gz ----结束4 安装依赖配置 JDK 12步骤 1 配置 JDK 环境变量。[elastic@osd3 ~] wget https://github.com/AdoptOpenJDK/openjdk12binaries/releases/download/jdk12u-2019-11-21-10-04/OpenJDK12Ujdk_aarch64_linux_hotspot_2019-11-21-10-04.tar.gz [elastic@osd3 ~] tar -xvf OpenJDK12U-jdk_aarch64_linux_hotspot_2019-11-21-10-04.tar.gz [elastic@osd3 ~] export JAVA_HOME=/home/elastic/jdk-12.0.2+10 [elastic@osd3 ~] export PATH=$JAVA_HOME/bin:$PATH----结束5 软件部署部署 Elasticsearch步骤 1 配置系统参数。[elastic@osd3~] ulimit -n 102400 [elastic@osd3~] sudo sysctl -w fs.file-max=102400 [elastic@osd3~] sudo sysctl -w vm.max_map_count=262144步骤 2 解压 Elasticsearch 软件包。[elastic@osd3~] tar -xvf elasticsearch-7.5.1-linux-x86_64.tar.gz [elastic@osd3~] cd elasticsearch-7.5.1步骤 3 删除 elasticsearch 自带的 jdk,用 jdk 12 替换。[elastic@osd3 elasticsearch-7.5.1] rm -rf ./jdk/* [elastic@osd3 elasticsearch-7.5.1] cp -r $JAVA_HOME/* ./jdk步骤 4 创建数据存储和日志目录。[elastic@osd3 elasticsearch-7.5.1] mkdir -p /home/elastic/data [elastic@osd3 elasticsearch-7.5.1] mkdir -p /home/elastic/logs步骤 5 修改配置文件 elasticsearch.yml。[elastic@osd3 elasticsearch-7.5.1] vim config/elasticsearch.yml ... ...   17 cluster.name: my-application  23 node.name: osd3  33 path.data: /home/elastic/data  37 path.logs: /home/elastic/logs  55 network.host: 172.170.75.15  59 http.port: 9200  68 discovery.seed_hosts: ["osd3"]  72 cluster.initial_master_nodes: ["osd3"]  89 xpack.ml.enabled: false  ... ... 步骤 6 启动 elasticsearch,后台运行。[elastic@osd3 elasticsearch-7.5.1] ./bin/elasticsearch -d----结束部署 Logstash步骤 1 解压 Logstash 软件包。[elastic@osd3~] tar -xvf logstash-7.5.1.tar.gz  [elastic@osd3~] cd logstash-7.5.1  [elastic@osd3 logstash-7.5.1]$ cat fix.sh #!/usr/bin/bash    STARTDIR=$(pwd)  JARDIR="/home/elastic/logstash-7.5.1/logstash-core/lib/jars"  JAR="jruby-complete-9.2.8.0.jar"  JRUBYDIR="${JAR}-dir"  PLATDIR="META-INF/jruby.home/lib/ruby/stdlib/ffi/platform/aarch64-linux"    cd ${JARDIR}  unzip -d ${JRUBYDIR} ${JAR}  cd "${JRUBYDIR}/${PLATDIR}"  cp -n types.conf platform.conf  cd "${JARDIR}/${JRUBYDIR}"    zip -r jruby-complete-9.2.8.0.jar *  mv  -f jruby-complete-9.2.8.0.jar ..  cd ${JARDIR}  rm -rf ${JRUBYDIR}    chown elastic:elastic jruby-complete-9.2.8.0.jar    sync  sync  cd ${STARTDIR} [elastic@osd3 logstash-7.5.1]$ sh fix.sh 步骤 2 修改配置文件 config/logstash.conf,添加内容仅供参考。input {    file {          type => "mylogs01"          path => "/var/log"          codec => multiline {                  pattern => "^\["                  negate => true                  what => "previous"          }          start_position => "beginning"    }  }    filter {          grok {            match => { "message" => "\[%{TIMESTAMP_ISO8601}\s*%{USER}\] \[%{USERNAME}\] \[%{USERNAME}\] - %{NOTSPACE}, IP: %{IP:ip}"}          }          grok {            match => { "message" => "\[%{TIMESTAMP_ISO8601:datel}\s*%{USER:leve}\] \[%{USERNAME}\] \[%{USERNAME}\] - %{NOTSPACE:request}"}          }  }  output {    elasticsearch {      hosts => ["http://172.170.75.15:9200"]      index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"      #user => "elastic"      #password => "changeme"    }  } 步骤 3 启动 Logstash。[elastic@osd3 logstash-7.5.1]$ ./bin/logstash -f config/logstash.conf >/tmp/logstash.log 2>&1 &----结束部署 Kibana步骤 1 解压 Kibana 软件包。[elastic@osd3~] tar -xvf kibana-7.5.1-linux-x86_64.tar.gz[elastic@osd3~] cd kibana-7.5.1-linux-x86_64步骤 2 修改配置文件 config/kibana.yml。2 server.port: 5601 7 server.host: "172.170.75.15" 28 elasticsearch.hosts: ["http://172.170.75.15:9200"] 37 kibana.index: ".kibana" 115 xpack.security.enabled: false 116 xpack.reporting.enabled: false步骤 3 替换 ARM 版本 node.js。[elastic@osd3 kibana-7.5.1-linux-x86_64] wget https://nodejs.org/dist/v10.15.2/node-v10.15.2-linux-arm64.tar.gz  [elastic@osd3 kibana-7.5.1-linux-x86_64] tar -xvf node-v10.15.2-linuxarm64.tar.gz [elastic@osd3 kibana-7.5.1-linux-x86_64] rm -rf node/* [elastic@osd3 kibana-7.5.1-linux-x86_64] cp -r node-v10.15.2-linuxarm64/*  ./node/ [elastic@osd3 kibana-7.5.1-linux-x86_64] rm -rf node-v10.15.2-linux-arm64 node-v10.15.2-linux-arm64.tar.gz步骤 4 启动 Kibana。[elastic@osd3 kibana-7.5.1-linux-x86_64] ./bin/kibana ----结束6 测试验证步骤 1 打开浏览器,输入 http://172.170.75.15:5601,根据实际场景测试 ELK 功能。----结束7 故障排除问题描述: [ERROR][org.logstash.Logstash    ] java.lang.IllegalStateException: Logstash stopped processing because of an error: (LoadError) load error: ffi/ffi -- java.lang.NullPointerException: null解决方案:执行脚本 fix.sh,可以解决这个问题。fix.sh 的内容如下。#!/usr/bin/bash   STARTDIR=$(pwd)  JARDIR="/home/elastic/elk/logstash-7.5.1/logstash-core/lib/jars"  # 根据个人环境,修改为实际路径  JAR="jruby-complete-9.2.8.0.jar"  JRUBYDIR="${JAR}-dir"  PLATDIR="META-INF/jruby.home/lib/ruby/stdlib/ffi/platform/aarch64-linux"    cd ${JARDIR}  unzip -d ${JRUBYDIR} ${JAR}  cd "${JRUBYDIR}/${PLATDIR}"  cp -n types.conf platform.conf  cd "${JARDIR}/${JRUBYDIR}"    zip -r jruby-complete-9.2.8.0.jar *  mv  -f jruby-complete-9.2.8.0.jar ..  cd ${JARDIR}  rm -rf ${JRUBYDIR}    chown elastic:elastic jruby-complete-9.2.8.0.jar    sync  sync  cd ${STARTDIR} 问题描述:ElasticsearchException[X-Pack is not supported and Machine Learning is not available for [linux-aarch64]; you can use the other X-Pack features (unsupported) by setting xpack.ml.enabled: false in elasticsearch.yml]解决方案:按照提示在文件 elasticsearch.yml 中,添加一行:xpack.ml.enabled: false问题描述:[error][reporting] The Reporting plugin encountered issues launching Chromium in a self-test. You may have trouble generating reports.error  [10:21:36.799] [error][reporting] Error: Failed to launch chrome! ... ... kibana-7.5.1linux-x86_64/data/headless_shell-linux/headless_shell: cannot execute binary file解决方案:Kibana 后端模块 xpack.reporting 的截图功能使用到了 chrome,CentOS 暂时不支持 chrome,因此需要在 kibana.yml 配置文件中增加以下参数禁用 X-Pack reporting。xpack.reporting.enabled:  false 8 参考资料[1] Kibana Reporting Setting: https://www.elastic.co/guide/en/kibana/6.8/reporting-settingskb.html【来自转载:https://bbs.huaweicloud.com/forum/thread-40493-1-1.html】 
  • [技术干货] [大数据]hbase-shaded-netty-2.1.0.jar编译移植
    一、编译环境准备1.1 安装Openjdk下载并安装到指定目录(如/opt/tools/installed):wget  https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u191-b12/OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gztar   -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gzmv jdk8u191-b12   /opt/tools/installed/配置java环境变量,在/etc/profile文件末尾处增加下面的代码:JAVA_HOME=/opt/tools/installed/jdk8u191-b12PATH=$JAVA_HOME/bin:$PATHexport   JAVA_HOME PATH运行下面命令,使修改的环境变量生效:source   /etc/profile1.2 安装Maven下载并安装到指定目录(如/opt/tools/installed):wget   https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gztar   -zxf apache-maven-3.5.4-bin.tar.gzmv   apache-maven-3.5.4 /opt/tools/installed/修改maven环境变量,在/etc/profile文件末尾增加下面高亮代码:JAVA_HOME=/opt/tools/installed/jdk8u191-b12MAVEN_HOME=/opt/tools/installed/apache-maven-3.5.4PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATHexport   MAVEN_HOME   JAVA_HOME PATH运行下面的命令,是修改的环境变量生效:source   /etc/profile修改maven配置文件中的:本地仓路径、远程仓等:<!--默认在“~/.m2/”目录下,修改成你自己想保存的目录--><localRepository>/path/to/local/repo</localRepository> <!--修改成自己搭建的maven仓库,ARM使能后的jar包替换到该仓库--><mirror></mirror> 二、软件移植分析--三、依赖库编译3.1 第三方依赖包3.1.1 编译netty-all-4.1.17.Final.jar请参考链接https://bbs.huaweicloud.com/forum/thread-22723-1-1.html 编译netty-all-4.1.17.Final.jar。四、Jar包编译从官网上下载源码并解压:wget https://github.com/apache/hbase-thirdparty/archive/2.0.0RC0.tar.gztar   -zxf 2.0.0RC0.tar.gzcd hbase-thirdparty-2.0.0RC0执行编译:mvn   install -DskipTests编译完成后在hbase-shaded-netty/target目录下生成jar包:五、参考信息--六、FAQQuestion1:无法执行“patch”Answer1:缺少patch,需手动安装yum -y install patchQuestion2:无法找到libnetty_transport_native_epoll_x86_64.soAnswer2:修改hbase-shaded-netty/pom.xml文件,将x86_64修改为aarch_64 【来自转载】
  • [技术干货] [大数据] 鲲鹏 kafka_2.11-0.10.1.1移植指引
    1 简介Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。本次移植以Kafka_2.11-0.10.1.1为例进行说明。官方链接:https://kafka.apache.org/类别:应用程序语言:Java 2 环境类别子项版本获取地址(方法)硬件CPUHi1616iBMC网络Ethernet-10GEiBMC存储SATA 4TiBMC内存xxG xxxMHziBMCOSLinx6.0.90cat /etc/os-releasePRETTY_NAME="Linx GNU/Linux 6.0.90   (stretch)"NAME="Linx GNU/Linux"VERSION_ID="9"VERSION="9 (stretch)"ID=LinxHOME_URL="http://www.linx-info.com/"Kernel4.19.0cat /proc/versionLinux version   4.19.0-0.bpo.1-linx-security-arm64 (linx-kernel@linx-info.com) (gcc version   6.3.0 20170516 (Debian 6.3.0-18+deb9u1)) #1 SMP Linx 4.19.12-1~bpo9+1linx4   (2019-06-05)软件GCC7.3.0Linx OS 自带OpenJDK1.8.0_181Linx OS 自带MySQL5.7.27参考下面安装说明 3 依赖安装3.1  Linx OS 安装3.2  挂载Linx OS 镜像3.3  安将Linx OS 镜像作为Linx 的下载镜像源3.4  安装ant编译软件3.5  lz4-java-1.3.0编译和安装3.6  rocksdb-5.7.3编译和安装3.7  gradle-5.4.1编译和安装3.8  Scala-2.11.11编译和安装3.9  gradle-scoverage-3.1.3编译和安装3.10  shadow-5.0.0编译和安装3.1 Linx OS 安装从Linx 接口人获取OS 镜像:Linx-6.0.90-20190802-arm64-DVD-1.iso。支持物理机安装。支持虚拟机qemu-kvm 安装。说明:安装过程网卡故障排除,参考章节7。3.2 挂载Linx OS 镜像1、下载OS 镜像,部署到指定的目录(如/home/root/):Linx:~/kafka_2.11-0.10.1.1#   ls /home/root/Linx-6.0.90-20190802-arm64-DVD-1.iso 2、部署Linx OS 镜像到/media/cdrom/目录下:Linx:~/kafka_2.11-0.10.1.1#mkdir   /media/cdromLinx:~/kafka_2.11-0.10.1.1#mount  -o loop   /home/root/rhel-server-7.3-x86_64-dvd.iso /media/cdrom/home/root/Linx-6.0.90-20190802-arm64-DVD-1.iso   on /media/cdrom 3、确认部署是否成功:Linx:~/kafka_2.11-0.10.1.1#   mount |grep Linx-6.0.90-20190802-arm64-DVD-1.iso/home/root/Linx-6.0.90-20190802-arm64-DVD-1.iso   on /media/cdrom type iso9660   (ro,relatime,nojoliet,check=s,map=n,blocksize=2048) 3.3 安将Linx OS 镜像作为Linx 的下载镜像源1、配置镜像源:Linx:~/kafka_2.11-0.10.1.1# apt-cdrom -m   -d=/media/cdrom addUsing CD-ROM mount point /media/cdrom/Identifying...   [d8aeb8c8dac04a340b1b991de1a2052b-2]Scanning disc for index files...Found 2 package indexes, 0 source   indexes, 0 translation indexes and 0 signaturesThis disc is called:'Linx GNU/Linux 6.0.90-20190802 _Stretch_   - Unofficial arm64 DVD Binary-1 20190802-08:17'Reading Package Indexes... DoneWriting new source listSource list entries for this disc are:deb cdrom:[Linx GNU/Linux 6.0.90-20190802   _Stretch_ - Unofficial arm64 DVD Binary-1 20190802-08:17]/ stretch contrib   mainRepeat this process for the rest of the   CDs in your set. 3.4 安装ant编译软件ant  是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。1、下载ant开源软件包wget   http://mirror.bit.edu.cn/apache//ant/binaries/apache-ant-1.9.14-bin.tar.gz 2、解压apache-ant-1.9.14-bin.tar.gztar zxvf apache-ant-1.9.14-bin.tar.gz 3、进入解压路径cd apache-ant-1.9.14/ 4、将ANT_HOME配置到/etc/profile环境变量中vi /etc/proflile 5、使ANT_HOME环境变量生效source /etc/proflile 说明: ant 编译过程故障问题,参考:9.1 章节。3.5 lz4-java-1.3.0编译和安装1、下载源码包并解压到指定的目录:wget https://github.com/lz4/lz4-java/archive/1.3.0.zipunzip 1.3.0.zip 2、适配ARM64,修改编译参数,增加编译选项"-fsigned-char":vim build.xml 3、修改版本号。修改版本控制文件"ivy.xml",修改revision字段的值为:1.3.04、执行编译命令:ant 编译结果: 输出的jar包位于dist目录下:./dist/lz4-1.3.0.jar5、运行:将lz4-1.3.0.jar 替换替换kafka-0.10.1.1 目录下libs对应的库lz4-1.3.0.jar3.6 rocksdb-5.7.3编译和安装kafka-0.10.1.1默认依赖rocksdb-4.9.0。但是rocksdb-4.9.0,在aarch64存在编译错误,官方通过高版本来解决此问题。因此直接升级rocksdb依赖库版本为5.7.3。1、下载源码并解压:wget   https://github.com/facebook/rocksdb/archive/v5.7.3.tar.gzMD5   值如下:root@HMW:~/facebook_rocksdb/tmp$   md5sum v5.7.3.tar.gz539d606dc532ebc2e823a62a064e6be8  v5.7.3.tar.gz mv v5.7.3.tar.gz  rocksdb-5.7.3.tar.gztar -zxvf rocksdb-5.7.3.tar.gz 2、修改代码和编译参数,修改Makefile:# Set the default DEBUG_LEVEL to 1DEBUG_LEVEL?=0 CFLAGS += $(WARNING_FLAGS) -I.   -I./include $(PLATFORM_CCFLAGS) $(OPT) -fsigned-char   -I /usr/lib/jvm/java-8-openjdk-arm64/include -I   /usr/lib/jvm/java-8-openjdk-arm64/include/linuxCXXFLAGS += $(WARNING_FLAGS) -I.   -I./include $(PLATFORM_CXXFLAGS) $(OPT) -Woverloaded-virtual   -Wnon-virtual-dtor -Wno-missing-field-initializers   -fsigned-char -std=c++11 -I /usr/lib/jvm/java-8-openjdk-arm64/include -I   /usr/lib/jvm/java-8-openjdk-arm64/include/linux 3、编译:make rocksdbjava -j8 编译结果,编译出的jar包位于: ./java/target/rocksdbjni-5.7.3-linux64.jar。参考:Linx:/home/root/rocksdb-5.7.3/java/target#   ls -altotal 154128drwxr-xr-x  5 root root      4096 Aug 26 11:49 .drwxrwxr-x 10 root root      4096 Aug 25 16:53 ..drwxr-xr-x  3 root root      4096 Aug 25 16:43 apidocsdrwxr-xr-x  3 root root      4096 Aug 25 16:43 classes-rwxr-xr-x  1 root root 117951728 Aug 25 16:55   librocksdbjni-linux64.so-rw-r--r--  1 root root    39851398 Aug 25 16:56 rocksdbjni-5.7.3-linux64.jardrwxr-xr-x  3 root root      4096 Aug 25 16:44 test-classes 说明:rocksdbjni-5.7.3-linux64.jar 包内的librocksdbjni-linux64.so包含符号信息,可通过strip命令去掉。重新制作jar包。4、运行:编译输出的rocksdbjni-5.7.3-linux64.jar 替换kafka-0.10.1.1 目录下libs对应的库rocksdbjni-4.9.0.jar3.7 gradle-5.4.1编译和安装Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。面向Java应用为主。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。1、下载并安装Gradle包:wget -c https://downloads.gradle.org/distributions/gradle-5.4.1-bin.zipunzip gradle-5.4.1-bin.zip -d /usr/local 2、配置路径:export GRADLE_HOME=/usr/local/gradle-5.4.1export PATH=$PATH:$GRADLE_HOME/bin 3.8 Scala-2.11.11编译和安装1、下载并安装Scala-2.11.11:wget -c   https://downloads.lightbend.com/scala/2.11.11/scala-2.11.11.tgztar -zxvf scala-2.11.11.tgz -d /usr/local 2、配置路径:export SCALA_HOME=/usr/local/scla-2.11.11export PATH=$PATH:$SCALA_HOME/bin 3.9 gradle-scoverage-3.1.3编译和安装1、下载并安装gradle-scoverage-3.1.3:wget -c   https://github.com/scoverage/gradle-scoverage/archive/3.1.3.tar.gz -O   gradle-scoverage-3.1.3.tar.gztar -zxvf gradle-scoverage-3.1.3.tar.gz 2、执行编译:cd gradle-scoverage-3.1.3gradle assemble 3.10 shadow-5.0.0编译和安装1、下载并安装shadow-5.0.0:wget -c   https://github.com/johnrengelman/shadow/archive/5.0.0.tar.gz -O   shadow-5.0.0.tar.gztar -zxvf shadow-5.0.0.tar.gz 2、执行编译:cd shadow-5.0.0gradle assemble 4 kafka-0.10.1.1编译和安装1、创建gradle本地仓库目录:mkdir -p /root/gradleRepository 2、下载kafka-0.11.0.0源码包并解压:https://archive.apache.org/dist/kafka/0.10.1.1/kafka-0.10.1.1-src.tgztar -zxvf kafka-0.10.1.1-src.tgzcd kafka-0.10.1.1-src 3、修改配置文件:vim build.gradle dependencies {// For Apache Rat   plugin to ignore non-Git filesclasspath   "org.ajoberstar:grgit:1.5.0"classpath   'com.github.ben-manes:gradle-versions-plugin:0.12.0'classpath 'org.scoverage:gradle-scoverage:3.1.3'classpath   'com.github.jengelman.gradle.plugins:shadow:5.0.0'} 将上述版本号修改成对应组件的版本号。此处使用的是gradle-scoverage-3.1.3 和 shadow-5.0.0修改gradle.properties文件中的scalaVersion版本号gradle.properties:20:scalaVersion=2.11.11 通过文件dependencies.gradle,修改依赖的rocksdb版本号(4.9.0 ->5.7.3 )gradle/dependencies.gradle:41:  rocksDB: "5.7.3" 4、执行编译:gradle -g /root/gradleRepository cleangradle -g /root/gradleRepository releaseTarGz -info 编译结果如下:Linx:/home/root/kafka-0.10.1.1-src/core/build/distributions#   ls -altotal 40048drwxr-xr-x  3 root root     4096 Aug 26 12:46 .drwxr-xr-x 11 root   root     4096 Aug 25 18:40 ..-rw-r--r--  1 root root   727217 Aug 25 18:41   kafka_2.11-0.10.1.1-site-docs.tgz-rw-r--r--  1 root root 40266922 Aug 25 18:41 kafka_2.11-0.10.1.1.tgz 5、组件包重新打包/home/root/kafka-0.10.1.1-src/core/build/distributionstar -zxvf   kafka_2.11-0.10.1.1.tgz Linx:~/kafka_2.11-0.10.1.1#   ls  ./libsaopalliance-repackaged-2.4.0-b34.jar       javassist-3.18.2-GA.jar                     jetty-security-9.2.15.v20160210.jar     kafka-tools-0.10.1.1.jarargparse4j-0.5.0.jar                         javax.annotation-api-1.2.jar                jetty-server-9.2.15.v20160210.jar       log4j-1.2.17.jarconnect-api-0.10.1.1.jar                   javax.inject-1.jar                        jetty-servlet-9.2.15.v20160210.jar    lz4-1.3.0.jarconnect-file-0.10.1.1.jar                    javax.inject-2.4.0-b34.jar                  jetty-servlets-9.2.15.v20160210.jar     metrics-core-2.2.0.jarconnect-json-0.10.1.1.jar                  javax.servlet-api-3.1.0.jar                 jetty-util-9.2.15.v20160210.jar         osgi-resource-locator-1.0.1.jarconnect-runtime-0.10.1.1.jar               javax.ws.rs-api-2.0.1.jar                 jopt-simple-4.9.jar                   reflections-0.9.10.jarguava-18.0.jar                               jersey-client-2.22.2.jar                    kafka_2.11-0.10.1.1.jar                 rocksdbjni-5.7.3.jarhk2-api-2.4.0-b34.jar                        jersey-common-2.22.2.jar                    kafka_2.11-0.10.1.1-javadoc.jar         scala-library-2.11.11.jarhk2-locator-2.4.0-b34.jar                    jersey-container-servlet-2.22.2.jar       kafka_2.11-0.10.1.1-scaladoc.jar      scala-parser-combinators_2.11-1.0.4.jarhk2-utils-2.4.0-b34.jar                    jersey-container-servlet-core-2.22.2.jar  kafka_2.11-0.10.1.1-sources.jar       slf4j-api-1.7.21.jarjackson-annotations-2.6.0.jar              jersey-guava-2.22.2.jar                     kafka_2.11-0.10.1.1-test.jar            slf4j-log4j12-1.7.21.jarjackson-core-2.6.3.jar                     jersey-media-jaxb-2.22.2.jar                kafka_2.11-0.10.1.1-test-sources.jar    snappy-java-1.1.2.6.jarjackson-databind-2.6.3.jar                   jersey-server-2.22.2.jar                    kafka-clients-0.10.1.1.jar              tmpjackson-jaxrs-base-2.6.3.jar                 jetty-continuation-9.2.15.v20160210.jar   kafka-log4j-appender-0.10.1.1.jar     validation-api-1.1.0.Final.jarjackson-jaxrs-json-provider-2.6.3.jar      jetty-http-9.2.15.v20160210.jar           kafka-streams-0.10.1.1.jar            zkclient-0.9.jarjackson-module-jaxb-annotations-2.6.3.jar  jetty-io-9.2.15.v20160210.jar               kafka-streams-examples-0.10.1.1.jar     zookeeper-3.4.8.jar 使用3.5 章节 lz4-1.3.0.jar 和3.6 章节rocksdbjni-5.7.3.jar 替换上面红色标注的jar包。并重新压缩kafka_2.11-0.10.1.1.tgz。则最终安装包为kafka_2.11-0.10.1.1.tgz。 5 移植结果分析 使用鲲鹏开发套件重新检查kafka_2.11-0.10.1.1.tgz是否还包含依赖X86的so文件。如果还有依赖的x86架构的so文件,则需要继续完成对应jar包的编译,直到无依赖的x86架构的so文件。鲲鹏开发套件获取地址: https://bbs.huaweicloud.com/forum/thread-34057-1-1.html  6 功能验证1、解压kafka_2.11-0.10.1.1.tgzcd ~tar -zxvf    kafka_2.11-0.10.1.1.tgz 2、修改配置文件server.propertiescd ~/kafka_2.11-0.10.1.1/configvim server.properties 根据本地情况,修改hostname:host.name=hostnamezookeeper.connect=hostname:2181listeners=PLAINTEXT://hostname:9092 kafka详细配置可以参考官网指导https://kafka.apache.org/documentation/。3、启动Kafkal   新建Console,执行如下命令:bin/zookeeper-server-start.sh   config/zookeeper.properties l   新建Console,执行如下命令:bin/kafka-server-start.sh config/server.properties l   新建Console,检查进程启动情况:jsp 当Kafka,QuorunPeerMain两个进程启动成功,整个Kafka服务启动完成。下面通过Kafka的Topic,生产者,消费者进行消息验证。4、新建Console,创建Topicbin/kafka-topics.sh --create --zookeeper   XX.XX.XX.XX:2181 --replication-factor 1 --partitions 1 --topic test 5、新建Console,启动生产者bin/kafka-console-producer.sh --broker-list   XX.XX.XX.XX:9092 --topic test 6、新建Console,启动消费者./bin/kafka-console-consumer.sh --zookeeper   XX.XX.XX.XX:2181 --topic test --from-beginning 在生产者Console输入消息,则可以在消费者Console中收到由生产者发布的消息。则kafka基本功能验证完成。说明:验证过程中,启动kafka消费者失败故障排除,参考:7.3 章节 消费者或生产者启动失败故障排除 7 故障排除7.1  OS 安装故障排除7.2  ant 编译过程故障排除7.3  kafka 消费者或生产者启动失败故障排除7.1 OS 安装故障排除1、在Linx OS 安装完成后,会发现驱动存在,但是找不到网卡设备。需要修改内核启动参数,如下图:2、从Linx 接口人获取最新有效的序列号:linx-serial。3、通过如下配置文件进行修改:/etc/default/grub 4、通过下面命令使grub配置文件修改生效:update-grub 7.2 ant 编译过程故障排除1、缺少ivy*.jar包1)、出现如下错误提示问题根因缺少对应的ivy*.jar 包。2)、本例中执行下面的命令:ant ivy-bootstrap 下载ivy-2.2.0.jar。2、ivy*.jar 包版本过低,导致下载失败。错误提示如下:install-bnd:[ivy:cachepath] :: Ivy 2.2.0 -   20100923230623 :: http://ant.apache.org/ivy/   ::[ivy:cachepath] :: loading settings ::   url =   jar:file:/root/.ant/lib/ivy-2.2.0.jar!/org/apache/ivy/core/settings/ivysettings.xml[ivy:cachepath] :: resolving dependencies   :: biz.aQute#bnd-caller;working[ivy:cachepath] confs: [default][ivy:cachepath] You probably access the   destination server through a proxy server that is not well configured.[ivy:cachepath] You probably access the   destination server through a proxy server that is not well configured.[ivy:cachepath] :: resolution report ::   resolve 150ms :: artifacts dl 0ms---------------------------------------------------------------------| | modules || artifacts || conf | number| search|dwnlded|evicted||   number|dwnlded|---------------------------------------------------------------------| default | 1 | 0 | 0 | 0 || 0 | 0 |---------------------------------------------------------------------[ivy:cachepath][ivy:cachepath] :: problems summary ::[ivy:cachepath] :::: WARNINGS[ivy:cachepath] Host repo1.maven.org not   found. url=http://repo1.maven.org/maven2/biz/aQute/bnd/1.50.0/bnd-1.50.0.pom[ivy:cachepath] Host repo1.maven.org not   found. url=http://repo1.maven.org/maven2/biz/aQute/bnd/1.50.0/bnd-1.50.0.jar[ivy:cachepath] module not found:   biz.aQute#bnd;1.50.0[ivy:cachepath] ==== local: tried[ivy:cachepath]   /root/.ivy2/local/biz.aQute/bnd/1.50.0/ivys/ivy.xml[ivy:cachepath] -- artifact   biz.aQute#bnd;1.50.0!bnd.jar:[ivy:cachepath]   /root/.ivy2/local/biz.aQute/bnd/1.50.0/jars/bnd.jar[ivy:cachepath] ==== shared: tried[ivy:cachepath]   /root/.ivy2/shared/biz.aQute/bnd/1.50.0/ivys/ivy.xml[ivy:cachepath] -- artifact   biz.aQute#bnd;1.50.0!bnd.jar:[ivy:cachepath]   /root/.ivy2/shared/biz.aQute/bnd/1.50.0/jars/bnd.jar[ivy:cachepath] ==== public: tried[ivy:cachepath] http://repo1.maven.org/maven2/biz/aQute/bnd/1.50.0/bnd-1.50.0.pom[ivy:cachepath] -- artifact   biz.aQute#bnd;1.50.0!bnd.jar:[ivy:cachepath] http://repo1.maven.org/maven2/biz/aQute/bnd/1.50.0/bnd-1.50.0.jar[ivy:cachepath]   ::::::::::::::::::::::::::::::::::::::::::::::[ivy:cachepath] :: UNRESOLVED   DEPENDENCIES ::[ivy:cachepath]   ::::::::::::::::::::::::::::::::::::::::::::::[ivy:cachepath] :: biz.aQute#bnd;1.50.0:   not found[ivy:cachepath]   ::::::::::::::::::::::::::::::::::::::::::::::[ivy:cachepath][ivy:cachepath] :: USE VERBOSE OR DEBUG   MESSAGE LEVEL FOR MORE DETAILSBUILD FAILED/home/dir/dir_lz4-java_1.3.0/lz4-java-1.3.0/build.xml:87:   impossible to resolve dependencies:resolve failed - see   output for details ivy*.jar 低版本替换成高版本。如:/root/.ant/lib/ivy-2.2.0.jar 替换成ivy-2.4.0.jar7.3 kafka 消费者或生产者启动失败故障排除1、出现如下错误提示:root@Linx:~/kafka_2.11-0.10.1.1#   bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginningUsing the ConsoleConsumer with old consumer is   deprecated and will be removed in a future major release. Consider using the   new consumer by passing [bootstrap-server] instead of [zookeepe                   r].[2019-08-28 10:40:56,432] WARN Fetching topic metadata   with correlation id 0 for topics [Set(test)] from broker [BrokerEndPoint(0,Linx,9092)]   failed (kafka.client.ClientUtils$)java.nio.channels.ClosedChannelExceptionat   kafka.network.BlockingChannel.send(BlockingChannel.scala:110)at kafka.producer.SyncProducer.liftedTree1$1(SyncProducer.scala:80)at   kafka.producer.SyncProducer.kafka$producer$SyncProducer$$doSend(SyncProducer.scala:79)at   kafka.producer.SyncProducer.send(SyncProducer.scala:124)at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:59)at   kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:94)at   kafka.consumer.ConsumerFetcherManager$LeaderFinderThread.doWork(ConsumerFetcherManager.scala:65)at   kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:63)[2019-08-28 10:40:56,437] WARN   [console-consumer-46411_Linx-1567006855849-6e1e43c8-leader-finder-thread],   Failed to find leader for Set(test-0)   (kafka.consumer.ConsumerFetcherManager$Lead                   erFinderThread)kafka.common.KafkaException: fetching topic metadata   for topics [Set(test)] from broker [ArrayBuffer(BrokerEndPoint(0,Linx,9092))]   failedat   kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:73)at   kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:94)at kafka.consumer.ConsumerFetcherManager$LeaderFinderThread.doWork(ConsumerFetcherManager.scala:65)at   kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:63)Caused by: java.nio.channels.ClosedChannelExceptionat kafka.network.BlockingChannel.send(BlockingChannel.scala:110)at   kafka.producer.SyncProducer.liftedTree1$1(SyncProducer.scala:80)at   kafka.producer.SyncProducer.kafka$producer$SyncProducer$$doSend(SyncProducer.scala:79)at   kafka.producer.SyncProducer.send(SyncProducer.scala:124)at kafka.client.ClientUtils$.fetchTopicMetadata(ClientUtils.scala:59)。 启动失败的原因分析:上面红色标注,是一个hostname。此hostname 不能被系统正常解析。解决办法如下:l   修改配置:vim ./config/server.propertieslisteners=PLAINTEXT://localhost:9092 l   主机名Linx配置有效的IP:【来自转载】 
  • [技术干货] [大数据] librdkafka v1.2.0 移植和双向认证
    1 简介1、librdkafka 是 Apache Kafka 协议的 C 库实现,提供生产者、消费者和管理客户端。它的设计考虑到了消息传递的可靠性和高性能,当前的数据对于生产者超过100 万 msgs/秒,对于消费者超过300万 msgs/秒。librdkafka 根据 2-clause BSD 许可证获得许可。本文librdkafka 使用的openssl 组件为客户定制的低版本组件。客户主程序使用librdkafka 组件时,依赖的openssl 和OS 自带的openssl 不一致时,会导致客户主程序crash。给客户解决openssl 组件依赖冲突是本文的目的。librdkakfa 使用openssl,配合kafka_2.11_0.10.1.1 完成双向认证,基于安全协议完成生产者和消费者消息传递的基本功能。官方链接:https://github.com/edenhill/librdkafka类别:应用程序语言:C/C+2 环境类别子项版本获取地址(方法)硬件CPUHi1616iBMC网络Ethernet-10GEiBMC存储SATA 4TiBMC内存xxG xxxMHziBMCOSLinx6.0.90cat /etc/os-releasePRETTY_NAME="Linx GNU/Linux 6.0.90   (stretch)"NAME="Linx GNU/Linux"VERSION_ID="9"VERSION="9 (stretch)"ID=LinxHOME_URL="http://www.linx-info.com/"Kernel4.19.0cat /proc/versionLinux version   4.19.0-0.bpo.1-linx-security-arm64 (linx-kernel@linx-info.com) (gcc version   6.3.0 20170516 (Debian 6.3.0-18+deb9u1)) #1 SMP Linx 4.19.12-1~bpo9+1linx4   (2019-06-05)软件GCC7.3.0Linx OS 自带OpenJDK1.8.0_181Linx OS 自带openssl1.1自带动态库libcrypto.so.1.1   ,libssl.so.1.1kafkakafka_2.11-0.10.1.1参考鲲鹏   kafka_2.11-0.10.1.1 移植指南 3 依赖安装3.1  Linx OS 安装3.2  挂载Linx OS 镜像3.3  安将Linx OS 镜像作为Linx 的下载镜像源3.1 Linx OS 安装从Linx 接口人获取OS 镜像:Linx-6.0.90-20190802-arm64-DVD-1.iso。支持物理机安装。支持虚拟机qemu-kvm 安装。说明:安装过程网卡故障排除,参考章节7。3.2 挂载Linx OS 镜像1、下载OS 镜像,部署到指定的目录(如/home/root/):Linx:~/kafka_2.11-0.10.1.1#   ls /home/root/Linx-6.0.90-20190802-arm64-DVD-1.iso 2、部署Linx OS 镜像到/media/cdrom/目录下:Linx:~/kafka_2.11-0.10.1.1#mkdir   /media/cdromLinx:~/kafka_2.11-0.10.1.1#mount  -o loop /home/root/rhel-server-7.3-x86_64-dvd.iso   /media/cdrom/home/root/Linx-6.0.90-20190802-arm64-DVD-1.iso   on /media/cdrom 3、确认部署是否成功:Linx:~/kafka_2.11-0.10.1.1#   mount |grep Linx-6.0.90-20190802-arm64-DVD-1.iso/home/root/Linx-6.0.90-20190802-arm64-DVD-1.iso   on /media/cdrom type iso9660   (ro,relatime,nojoliet,check=s,map=n,blocksize=2048) 3.3 安将Linx OS 镜像作为Linx 的下载镜像源1、配置镜像源:Linx:~/kafka_2.11-0.10.1.1# apt-cdrom -m   -d=/media/cdrom addUsing CD-ROM mount point /media/cdrom/Identifying...   [d8aeb8c8dac04a340b1b991de1a2052b-2]Scanning disc for index files...Found 2 package indexes, 0 source   indexes, 0 translation indexes and 0 signaturesThis disc is called:'Linx GNU/Linux 6.0.90-20190802 _Stretch_   - Unofficial arm64 DVD Binary-1 20190802-08:17'Reading Package Indexes... DoneWriting new source listSource list entries for this disc are:deb cdrom:[Linx GNU/Linux 6.0.90-20190802   _Stretch_ - Unofficial arm64 DVD Binary-1 20190802-08:17]/ stretch contrib   mainRepeat this process for the rest of the   CDs in your set. 4 librdkafka 编译和安装4.1  源码下载4.2  导入客户定制的openssl4.3  编译和安装4.1 源码下载1、源码路径:https://github.com/edenhill/librdkafka,版本:v1.2.02、下载方法:3、解压后,假设源码的路径为:/home/mydir/librdkafka-master_user/4.2 导入客户定制的openssl1、客户提供相同Linx OS 环境下的定制版本openssl 静态库和头文件,版本号:1.0.2。操作系统自带的openssl 库版号低2、部署路径为:/home/mydir/librdkafka-master_user/vnd_opensslLinx:/home/mydir/librdkafka-master_user/vnd_openssl#   tree.├──   libcrypto.a├── libssl.a└── openssl├── aes.h├── asn1.h├──   asn1_mac.h├── asn1t.h├── bio.h├──   blowfish.h├── bn.h├── buffer.h├──   camellia.h├── cast.h├── cmac.h├── cms.h├── comp.h├──   conf_api.h├── conf.h├── crypto.h├── des.h├──   des_old.h├── dh.h├── dsa.h├── dso.h├── dtls1.h├── ebcdic.h├── ecdh.h├── ecdsa.h├── ec.h├── engine.h├── e_os2.h├── err.h├── evp.h├── hmac.h├── idea.h├──   krb5_asn.h├── kssl.h├── lhash.h├── md4.h├── md5.h├── mdc2.h├── modes.h├──   objects.h├──   obj_mac.h├── ocsp.h├──   opensslconf.h├──   opensslv.h├──   ossl_typ.h├── pem2.h├── pem.h├── pkcs12.h├── pkcs7.h├── pqueue.h├── rand.h├── rc2.h├── rc4.h├── ripemd.h├── rsa.h├──   safestack.h├── seed.h├── sha.h├── sm2dh.h├── sm2dsa.h├── sm3.h├── sm4.h├── srp.h├── srtp.h├── ssl23.h├── ssl2.h├── ssl3.h├── ssl.h├── stack.h├──   symhacks.h├── tls1.h├── ts.h├── txt_db.h├──   ui_compat.h├── ui.h├──   whrlpool.h├── x509.h├── x509v3.h└──   x509_vfy.h1 directory, 81 files 4.3 编译和安装1、配置编译参数Linx:/home/mydir/librdkafka-master_user#   CFLAGS='-fsigned-char -I /home/mydir/librdkafka-master_user/vnd_openssl'   CPPFLAGS='-I /home/mydir/librdkafka-master_user/vnd_openssl'   STATIC_LIB_libssl=/home/mydir/librdkafka-master_user/vnd_openssl/libssl.a   STATIC_LIB_libcrypto=/home/mydir/librdkafka-master_user/vnd_openssl/libcrypto.a  ./configureusing cache file config.cachechecking for OS or distribution... ok   (linx)checking for C compiler from CC env...   failedchecking for gcc (by command)... ok   (cached)checking for C++ compiler from CXX env...   failedchecking for C++ compiler (g++)... ok   (cached)checking executable ld... ok (cached)checking executable nm... ok (cached)checking executable objdump... ok   (cached)checking executable strip... ok (cached)checking for pkgconfig (by command)... ok   (cached)checking for install (by command)... ok   (cached)checking for PIC (by compile)... ok   (cached)checking for GNU-compatible linker   options... ok (cached)checking for GNU linker-script ld flag...   ok (cached)checking for __atomic_32 (by compile)...   ok (cached)checking for __atomic_64 (by compile)...   ok (cached)checking for socket (by compile)... ok   (cached)parsing version '0x010200ff'... ok (1.2.0)checking for librt (by pkg-config)...   failedchecking for librt (by compile)... ok   (cached)checking for libpthread (by   pkg-config)... failedchecking for libpthread (by compile)...   ok (cached)checking for c11threads (by   pkg-config)... failedchecking for c11threads (by compile)...   failed (disable)checking for libdl (by pkg-config)...   failedchecking for libdl (by compile)... ok   (cached)checking for zlib (by pkg-config)... okchecking for libcrypto (by pkg-config)...   okchecking for libssl (by pkg-config)... okchecking for libsasl2 (by pkg-config)...   failedchecking for libsasl2 (by compile)...   failed (disable)checking for libsasl (by pkg-config)...   failedchecking for libsasl (by compile)...   failed (disable)checking for libzstd (by pkg-config)...   failedchecking for libzstd (by compile)...   failed (disable)checking for libm (by pkg-config)...   failedchecking for libm (by compile)... ok   (cached)checking for liblz4 (by pkg-config)...   failedchecking for liblz4 (by compile)...   failed (disable)checking for rapidjson (by compile)...   failed (disable)checking for crc32chw (by compile)...   failed (disable)checking for regex (by compile)... ok   (cached)checking for strndup (by compile)... ok   (cached)checking for strerror_r (by compile)...   ok (cached)checking for pthread_setname_gnu (by   compile)... ok (cached)checking for nm (by env NM)... ok   (cached)checking for python (by command)... ok   (cached)Generated Makefile.configGenerated config.hConfiguration summary:prefix                   /usr/localMKL_DISTRO               linxSOLIB_EXT                .soARCH                     aarch64CPU                      genericGEN_PKG_CONFIG           yENABLE_ZSTD              yENABLE_SSL               yENABLE_GSSAPI            yENABLE_DEVEL             nENABLE_VALGRIND          nENABLE_REFCNT_DEBUG      nENABLE_SHAREDPTR_DEBUG   nENABLE_LZ4_EXT           yMKL_APP_NAME             librdkafkaMKL_APP_DESC_ONELINE     The Apache Kafka C/C++ libraryCC                       gccCXX                      g++LD                       ldNM                       nmOBJDUMP                  objdumpSTRIP                    stripCFLAGS                   -fsigned-charCPPFLAGS                 -I   /home/mydir/librdkafka-master_user/vnd_openssl -g -O2 -fPIC -Wall   -Wsign-compare -Wfloat-equal -Wpointer-arith -Wcast-alignPKG_CONFIG               pkg-configINSTALL                  installLIB_LDFLAGS              -shared   -Wl,-soname,$(LIBFILENAME)LDFLAG_LINKERSCRIPT      -Wl,--version-script=RDKAFKA_VERSION_STR      1.2.0MKL_APP_VERSION          1.2.0LIBS                     -lm   /home/mydir/librdkafka-master_user/vnd_openssl/libssl.a /home/mydir/librdkafka-master_user/vnd_openssl/libcrypto.a   -lz -ldl -lpthread -lrtCXXFLAGS                 -Wno-non-virtual-dtorSYMDUMPER                $(NM) -Dexec_prefix              /usr/localbindir                   /usr/local/binsbindir                  /usr/local/sbinlibexecdir               /usr/local/libexecdatadir                  /usr/local/sharesysconfdir               /usr/local/etcsharedstatedir           /usr/local/comlocalstatedir            /usr/local/varlibdir                   /usr/local/libincludedir               /usr/local/includeinfodir                  /usr/local/infomandir                   /usr/local/manBUILT_WITH               GCC GXX PKGCONFIG INSTALL   GNULD LDS LIBDL PLUGINS ZLIB SSL HDRHISTOGRAM SNAPPY SOCKEM SASL_SCRAM   SASL_OAUTHBEARERGenerated config.cacheNow type 'make' to build 注意红色标注的地方都会生效2、编译librdkafkamake 3、编译结果确认:Linx:/home/mydir/librdkafka-master_user/src#   ls -al lib*-rw-r--r-- 1 root root   93796 Sep    6 02:54 librdkafka_cgrp_synch.png-rw-r--r-- 1 root root    8158 Sep    6 13:10 librdkafka.ldslrwxrwxrwx 1 root root      15 Sep    6 13:10 librdkafka.so -> librdkafka.so.1-rwxr-xr-x 1 root root 9382680 Sep 11   05:56 librdkafka.so.1 上述的动态库librdkafka.so.1 即为客户需要的动态库。4、使用librdkafka.so.1:下面使用librdkafka 目录下面的例子(主程序)来介绍使用方法。gcc -I /home/mydir/librdkafka-master_user/vnd_openssl   -g -O2 -fPIC -Wall -Wsign-compare -Wfloat-equal -Wpointer-arith -Wcast-align   -fsigned-char    -I../src   rdkafka_example.c -o rdkafka_example  \-lrdkafka -lm /home/mydir/librdkafka-master_user/vnd_openssl/libssl.a   /home/mydir/librdkafka-master_user/vnd_openssl/libcrypto.a -lz -ldl -lpthread   –lrt 5、对主程序rdkafka_example使用的是静态库还是动态库确认方法如下:使用系统自带的默认openssl动态库的情况如下:Linx:/home/mydir/librdkafka-master/examples#   ldd rdkafka_examplelinux-vdso.so.1 (0x0000ffff8ba60000)librdkafka.so.1   => /home/mydir/librdkafka-master/src/librdkafka.so.1 (0x0000ffff8b919000)libm.so.6 =>   /lib/aarch64-linux-gnu/libm.so.6 (0x0000ffff8b850000)libssl.so.1.1 =>   /usr/lib/aarch64-linux-gnu/libssl.so.1.1 (0x0000ffff8b7e5000)libcrypto.so.1.1 =>   /usr/lib/aarch64-linux-gnu/libcrypto.so.1.1 (0x0000ffff8b5d4000)libz.so.1 => /lib/aarch64-linux-gnu/libz.so.1   (0x0000ffff8b5ac000)libdl.so.2 =>   /lib/aarch64-linux-gnu/libdl.so.2 (0x0000ffff8b599000)libpthread.so.0 =>   /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000ffff8b56d000)librt.so.1 =>   /lib/aarch64-linux-gnu/librt.so.1 (0x0000ffff8b556000)libc.so.6 =>   /lib/aarch64-linux-gnu/libc.so.6 (0x0000ffff8b40c000)/lib/ld-linux-aarch64.so.1   (0x0000ffff8ba35000) 使用用户指定的openssl 静态库情况如下:Linx:/home/mydir/librdkafka-master_user/examples#   ldd rdkafka_examplelinux-vdso.so.1 (0x0000ffffb7770000)librdkafka.so.1   => /home/mydir/librdkafka-master_user/src/librdkafka.so.1   (0x0000ffffb7466000)libm.so.6 =>   /lib/aarch64-linux-gnu/libm.so.6 (0x0000ffffb739d000)libz.so.1 =>   /lib/aarch64-linux-gnu/libz.so.1 (0x0000ffffb7375000)libdl.so.2 => /lib/aarch64-linux-gnu/libdl.so.2   (0x0000ffffb7362000)libpthread.so.0 =>   /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000ffffb7336000)librt.so.1 =>   /lib/aarch64-linux-gnu/librt.so.1 (0x0000ffffb731f000)libc.so.6 =>   /lib/aarch64-linux-gnu/libc.so.6 (0x0000ffffb71d5000)/lib/ld-linux-aarch64.so.1   (0x0000ffffb7745000) 说明:关于客户主程序使用多个版本openssl 导致core 故障排除细节,参考故障排查章节。 5 移植结果分析通过在librdkafa 初始化接口中添加,即可以打开调试信息:rd_kafka_conf_set(conf, "debug", "all",0, 0);启动打开调试信息后rdkafka_example,输出信息如下1568201053.496 RDKAFKA-7-OPENSSL: rdkafka#producer-1: [thrd:app]: librdkafka built with OpenSSL version 0x1000207f1568201053.496 RDKAFKA-7-SSL: rdkafka#producer-1: [thrd:app]: Loading CA certificate(s) from file /home/mydir/librdkafka-master/kafka_sslv3/ca-cert1568201053.497 RDKAFKA-7-SSL: rdkafka#producer-1: [thrd:app]: Loading public key from file /home/mydir/librdkafka-master/kafka_sslv3/client_linx_client.pem1568201053.497 RDKAFKA-7-SSL: rdkafka#producer-1: [thrd:app]: Loading private key file from /home/mydir/librdkafka-master/kafka_sslv3/client_linx_client.key1568201053.497 RDKAFKA-7-SSLPASSWD: rdkafka#producer-1: [thrd:app]: Private key requires password1568201053.497 RDKAFKA-7-INIT: rdkafka#producer-1: [thrd:app]: librdkafka v1.2.0 (0x10200ff) rdkafka#producer-1 initialized (builtin.features gzip,snappy,ssl,sasl,regex,lz4,sasl_plain,sasl_scram,plugins,sasl_oauthbearer, GCC GXX PKGCONFIG INSTALL GNULD LDS LIBDL PLUGINS ZLIB SSL HDRHISTOGRAM SNAPPY SOCKEM SASL_SCRAM SASL_OAUTHBEARER, debug 0xffff)1568201053.497 RDKAFKA-7-BRKMAIN: rdkafka#producer-1: [thrd::0/internal]: :0/internal: Enter main broker thread从上可以看出加载openssl 库版本号为从客户导入的openssl 库版本号。符合预期。 6 功能验证本章节涉及支持双向认证的证书和key 的制作。一致支持双向认证接点组件kafka_2.11-0.10.1.1和librdkafka。运行实例:zookeeper-serverkafka-server,使用jks 证书。kafka-console-producer,使用jks 证书。kafka-console-consumer,使用jsk 证书。./rdkafka_example生产者,使用pem证书。./rdkafka_example消费者,使用pem证书。6.1  pem,jks 证书制作和配置6.2  java环境kafka服务器验证6.3  java 环境kafka 生产者和消费者验证6.4  c/c++ 环境librdkafka 生产者和消费者验证6.1 pem,jks 证书制作和配置证书工作目录:/home/mydir/librdkafka-master/kafka_sslv3kafka_sslv3,其中包含gen-ssl-certs.sh脚本在证书工作目录下:l   制作根证书./gen-ssl-certs.sh ca   ca-cert CN Linx:/home/mydir/librdkafka-master/kafka_sslv3#   ls -altotal 20drwxr-xr-x 2 root root 4096 Sep 21 06:53   .drwxr-xr-x 4 root root 4096 Sep 21 04:57   ..-rwxr-xr-x 1 root root 1379 Sep 21 06:53   ca-cert-rwxr-xr-x 1 root root 1854 Sep 21 06:53   ca-cert.key-rwxr-xr-x 1 root root 3997 Sep 21 06:52   gen-ssl-certs.sh 新增根证书文件:ca-cert,ca-cert.keyl   制作java 环境server 证书。创建java子目录:mkdir javagen-ssl-certs.sh -k   server ca-cert broker_linx_ linxls -al-rwxr-xr-x 1 root root 1089 Sep 21 07:20 broker_linx_cert-file-rwxr-xr-x 1 root root 1224 Sep 21 07:20 broker_linx_cert-signed-rwxr-xr-x 1 root root 4212 Sep 21 07:20 broker_linx_server.keystore.jks-rwxr-xr-x 1 root root 1039 Sep 21 07:20 broker_linx_server.truststore.jks-rwxr-xr-x 1 root root 1379 Sep 21 06:53   ca-cert-rwxr-xr-x 1 root root 1854 Sep 21 06:53   ca-cert.key-rwxr-xr-x 1 root root   17 Sep 21 07:20 ca-cert.srl cp ./* ./java/ 上述红色标注文件为server 需要使用的jsk格式证书和key文件l   制作c/c++环境客户端(消费者和生产者)证书./gen-ssl-certs.sh   client ca-cert client_linx_ linxLinx:/home/mydir/librdkafka-master/kafka_sslv3#   ls -altotal 60drwxr-xr-x 3 root root 4096 Sep 21 07:23   .drwxr-xr-x 4 root root 4096 Sep 21 04:57   ..-rwxr-xr-x 1 root root 1089 Sep 21 07:20   broker_linx_cert-file-rwxr-xr-x 1 root root 1224 Sep 21 07:20   broker_linx_cert-signed-rwxr-xr-x 1 root root 4212 Sep 21 07:20   broker_linx_server.keystore.jks-rwxr-xr-x 1 root root 1039 Sep 21 07:20   broker_linx_server.truststore.jks-rwxr-xr-x 1 root root 1379 Sep 21 06:53   ca-cert-rwxr-xr-x 1 root root 1854 Sep 21 06:53   ca-cert.key-rwxr-xr-x 1 root root   17 Sep 21 07:23 ca-cert.srl-rwxr-xr-x 1 root root   1751 Sep 21 07:23 client_linx_client.key-rwxr-xr-x 1 root root   1224 Sep 21 07:23 client_linx_client.pem-rwxr-xr-x 1 root root   1033 Sep 21 07:23 client_linx_client.req-rwxr-xr-x 1 root root 3997 Sep 21 06:52   gen-ssl-certs.shdrwxr-xr-x 2 root root 4096 Sep 21 07:23   java 上表红色标注为librdkafka 使用的pem格式证书和key文件l   制作java 环境客户端(消费者和生产者)证书。注意此目录为java子目录:./gen-ssl-certs.sh -k   client ca-cert client_linx_ linxLinx:/home/mydir/librdkafka-master/kafka_sslv3/java#   ls -altotal 64drwxr-xr-x 2 root root 4096 Sep 21 07:27   .drwxr-xr-x 3 root root 4096 Sep 21 07:23   ..-rw-r--r-- 1 root root 1089 Sep 21 07:23   broker_linx_cert-file-rw-r--r-- 1 root root 1224 Sep 21 07:23   broker_linx_cert-signed-rw-r--r-- 1 root root 4212 Sep 21 07:23   broker_linx_server.keystore.jks-rw-r--r-- 1 root root 1039 Sep 21 07:23   broker_linx_server.truststore.jks-rw-r--r-- 1 root root 1379 Sep 21 07:23   ca-cert-rw------- 1 root root 1854 Sep 21 07:23   ca-cert.key-rw-r--r-- 1 root root   17 Sep 21 07:27 ca-cert.srl-rw-r--r-- 1 root root   1089 Sep 21 07:27 client_linx_cert-file-rw-r--r-- 1 root root   1224 Sep 21 07:27 client_linx_cert-signed-rw-r--r-- 1 root root   4213 Sep 21 07:27 client_linx_client.keystore.jks-rw-r--r-- 1 root root   1039 Sep 21 07:27 client_linx_client.truststore.jks-rwxr-xr-x 1 root root 3997 Sep 21 07:23   gen-ssl-certs.sh 6.2 java环境kafka服务器验证1、java kafka 工作目录为:/home/mydir/kafka_2.11-0.10.1.1修改配置:config/server.properties############################# Socket   Server Settings ############################## The address the socket server listens   on. It will get the value returned from#   java.net.InetAddress.getCanonicalHostName() if not configured.#     FORMAT:#       listeners = security_protocol://host_name:port#     EXAMPLE:#       listeners = PLAINTEXT://your.host.name:9092listeners=PLAINTEXT://192.168.33.176:9092,SSL://192.168.33.176:9093 2、添加配置SSL:config/server.properties############################# Zookeeper   ############################## Zookeeper connection string (see   zookeeper docs for details).# This is a comma separated host:port   pairs, each corresponding to a zk# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".# You can also append an optional chroot   string to the urls to specify the# root directory for all kafka znodes.zookeeper.connect=localhost:2181# Timeout in ms for connecting to   zookeeperzookeeper.connection.timeout.ms=6000# SSLsecurity.inter.broker.protocol=SSLssl.protocol = TLSssl.enabled.protocols=TLSv1.2,TLSv1.1,TLSv1ssl.keystore.type = JKSssl.keystore.location =   /home/mydir/librdkafka-master/kafka_sslv3/java/broker_linx_server.keystore.jksssl.keystore.password =   abcdefghssl.key.password =   abcdefghssl.truststore.type =   JKSssl.truststore.location   = /home/mydir/librdkafka-master/kafka_sslv3/java/broker_linx_server.truststore.jksssl.truststore.password   = abcdefgh# To require   authentication of clients use "require", else "none" or   "request"ssl.client.auth =   required 3、启动kafka server新建Console,启动zookeeper-serverLinx:/home/mydir/kafka_2.11-0.10.1.1# bin/zookeeper-server-start.sh   config/zookeeper.properties 新建Console,启动kafka-serverLinx:/home/mydir/kafka_2.11-0.10.1.1# bin/kafka-server-start.sh   config/server.properties 6.3 java 环境kafka 生产者和消费者验证1、添加配置配置文件:client-ssl2.propertiesLinx:/home/mydir/kafka_2.11-0.10.1.1# cat   config/client-ssl2.propertiessecurity.protocol=SSLssl.protocol = TLSssl.enabled.protocols=TLSv1.2,TLSv1.1,TLSv1ssl.truststore.type = JKSssl.truststore.location=/home/mydir/librdkafka-master/kafka_sslv3/java/client_linx_client.truststore.jksssl.truststore.password=abcdefghssl.keystore.type = JKSssl.keystore.location=/home/mydir/librdkafka-master/kafka_sslv3/java/client_linx_client.keystore.jksssl.keystore.password=abcdefghssl.key.password=abcdefgh 2、启动java生产者/home/mydir/kafka_2.11-0.10.1.1# ./bin/kafka-console-producer.sh   --broker-list 192.168.33.176:9093 --topic test --producer.config   ./config/client-ssl2.propertiessdsadaf 3、启动java消费者Linx:/home/mydir/kafka_2.11-0.10.1.1# bin/kafka-console-consumer.sh   --bootstrap-server 192.168.33.176:9093 --topic test --consumer.config   ./config/client-ssl2.properties --from-beginning --new-consumer[2019-09-21 10:00:12,668] WARN Error   while fetching metadata with correlation id 1 : {test=LEADER_NOT_AVAILABLE}   (org.apache.kafka.clients.NetworkClient)[2019-09-21 10:00:12,879] WARN Error   while fetching metadata with correlation id 2 : {test=LEADER_NOT_AVAILABLE}   (org.apache.kafka.clients.NetworkClient)[2019-09-21 10:00:13,000] WARN Error   while fetching metadata with correlation id 4 : {test=LEADER_NOT_AVAILABLE}   (org.apache.kafka.clients.NetworkClient)sdsadafhello everybodymy name is c/c++   producer 6.4 c/c++ 环境librdkafka 生产者和消费者验证1、C/C++ librdkafka 此处使用章节4,rdkafka_example进行测试。2、启动消费者Librdkafka 的安全参数:根证书,客户端证书,客户端key,以及密钥。作为启动参数传入sample 中。./rdkafka_example   -C -t test -p 0 -b 192.168.33.176:9093    \-X   security.protocol=ssl \-X   ssl.ca.location=/home/mydir/librdkafka-master/kafka_sslv3/ca-cert \-X   ssl.certificate.location=/home/mydir/librdkafka-master/kafka_sslv3/client_linx_client.pem   \-X   ssl.key.location=/home/mydir/librdkafka-master/kafka_sslv3/client_linx_client.key   \-X   ssl.key.password=abcdefgh% Message (offset 0, 7 bytes):% Message timestamp: create time   1569078074775 (1044s ago)Message Payload hexdump (7 bytes):00000000: 73 64 73 61 64 61 66                             sdsadaf% Consumer reached end of test [0]   message queue at offset 1% Message (offset 1, 15 bytes):% Message timestamp: create time   1569079142024 (1s ago)Message Payload hexdump (15 bytes):00000000: 68 65 6c 6c 6f 20 65 76 65 72   79 62 6f 64 79     hello everybody% Consumer reached end of test [0]   message queue at offset 2Message Payload hexdump (25 bytes):00000000: 6d 79 20 6e 61 6d 65 20 69 73   20 63 2f 63 2b 2b  my name is c/c++00000010: 20 70 72 6f 64 75 63 65 72                        producer% Consumer reached end of test [0]   message queue at offset 3 3、启动生产者./rdkafka_example   -P -t test -p 0 -b 192.168.33.176:9093    \-X   security.protocol=ssl \-X   ssl.ca.location=/home/mydir/librdkafka-master/kafka_sslv3/ca-cert \-X   ssl.certificate.location=/home/mydir/librdkafka-master/kafka_sslv3/client_linx_client.pem   \-X   ssl.key.location=/home/mydir/librdkafka-master/kafka_sslv3/client_linx_client.key   \-X   ssl.key.password=abcdefgh% Type stuff and hit enter to sendmy name is c/c++   producer% Sent 25 bytes to topic test partition 0 在服务器端和客户端(c/c++ librdkafka, java 消费者/生产者)均能正常发送消息和接受消息。 7 故障排除7.1  OS 安装故障排除7.2  openssl 交叉引用故障排除7.1 OS 安装故障排除1、在Linx OS 安装完成后,会发现驱动存在,但是找不到网卡设备。需要修改内核启动参数,如下图:2、从Linx 接口人获取最新有效的序列号:linx-serial。3、通过如下配置文件进行修改:/etc/default/grub 4、通过下面命令使grub配置文件修改生效:update-grub 7.2 openssl 交叉引用故障排除1、 客户直接搬移自己主程序到新的平台运行时,报告如下故障:SIGSEGV[TEST]Configuration read.[TEST]sm_Init()done.[TEST]BIO_new_file()done.[TEST]d2i_PKCS12_bio()doneProgram recived signal SIGSEGV,   Segmentation fault.0x0000aaaaaab36cc8 in EVP_MD_CTX_copy_ex   () 通过ldd 命令 追踪客户的主程序,和主程序关联的动态库Librdkafka。发现客户librdkafka 调用了openssl相关接口。且客户自行定制了低版本openssl 静态库。分析librdkafka源代码rdkafka_ssl.c:初始化接口对rd_kafka_ssl_init 对openssl 版本号进行编译宏控制,且只能初始化一次。OPENSSL_VERSION_NUMBER,定义在include/openssl/crypto.h,include/openssl/opensslv.h因此要求Librdkafka的编译必须主程序定制的openssl 必须是同一个版本openssl库和头文件。另也可以看出openssl 0x10100000L版本前后,接口有很大调整。/*** @brief Global OpenSSL cleanup.*/void rd_kafka_ssl_term (void) {#if   OPENSSL_VERSION_NUMBER < 0x10100000Lint i;if (CRYPTO_get_locking_callback() ==   &rd_kafka_transport_ssl_lock_cb) {CRYPTO_set_locking_callback(NULL);#ifdef   HAVE_OPENSSL_CRYPTO_THREADID_SET_CALLBACKCRYPTO_THREADID_set_callback(NULL);#elseCRYPTO_set_id_callback(NULL);#endiffor (i = 0 ; i <   rd_kafka_ssl_locks_cnt ; i++)mtx_destroy(&rd_kafka_ssl_locks);rd_free(rd_kafka_ssl_locks);}#endif}/*** @brief Global (once per process)   OpenSSL init.*/void rd_kafka_ssl_init (void) {#if   OPENSSL_VERSION_NUMBER < 0x10100000Lint i;if (!CRYPTO_get_locking_callback()) {rd_kafka_ssl_locks_cnt =   CRYPTO_num_locks();rd_kafka_ssl_locks =   rd_malloc(rd_kafka_ssl_locks_cnt *sizeof(*rd_kafka_ssl_locks));for (i = 0 ; i <   rd_kafka_ssl_locks_cnt ; i++)mtx_init(&rd_kafka_ssl_locks,   mtx_plain);CRYPTO_set_locking_callback(rd_kafka_transport_ssl_lock_cb);#ifdef   HAVE_OPENSSL_CRYPTO_THREADID_SET_CALLBACKCRYPTO_THREADID_set_callback(rd_kafka_transport_libcrypto_THREADID_callback);#elseCRYPTO_set_id_callback(rd_kafka_transport_ssl_threadid_cb);#endif}/* OPENSSL_init_ssl(3) and OPENSSL_init_crypto(3)   say:* "As of version 1.1.0 OpenSSL will   automatically allocate* all resources that it needs so no   explicit initialisation* is required. Similarly it will also   automatically* deinitialise as required."*/SSL_load_error_strings();SSL_library_init();ERR_load_BIO_strings();ERR_load_crypto_strings();OpenSSL_add_all_algorithms();#endif} 2、 通过导入客户定制的openssl 库,并强制关联特定openssl 版本编译librdkafka ,解决此问题。【来自转载】 
  • [技术干货] [大数据]Zookeeper V3.4.6安装指南
    下载zookeeper bin安装包,检查无X86依赖解压;进到解压路径创建data logs文件夹进到配置文件路径拷贝示例配置文件 修改zoo.cfg增加data  logs路径修改/etc/profile添加zookeeper 路径, source /etc/profile 生效 关闭防火墙等进到zookeeper路径进入bin路径执行启动检查状态: 版本echo stat|nc 127.0.0.1 2181【来自转载】 
  • [技术干货] [大数据]CDH 5.15.1(x86)Sqoop-移植指南 【中标麒麟7.5】
    1 CDH简介CDH(Cloudera’s Distribution Including Apache Hadoop)是Cloudera的开源大数据平台,基于Web的用户界面,支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、Hbase、Zookeeper、Sqoop,简化了大数据平台的安装、使用难度。本文主要是描述如何将CDH 5.15.1的x86版本中的sqoop相关组件移植到TaiShan服务器上,包含编译部分。CDH的其他组件如果需要移植,也可以参考本文中描述的方法操作。官方链接:https://archive.cloudera.com/cdh5/cdh/5/sqoop2-1.99.5-cdh5.15.1/类别:大数据语言: JAVA 2 软硬件环境类别子项版本获取地址(方法) 硬件CPUKunpeng 920iBMC网络Ethernet-10GEiBMC存储SATA 4TiBMC内存xxG   xxxMHziBMCOSNeoKylin7.5cat   /etc/neokylin-releaseKernel4.14.0cat   /proc/version 软件GCC4.8.5gcc -vMaven3.5.4参考下面安装说明JDK1.8.0_191参考下面安装说明Protoc2.5.0参考下面安装说明3 编译环境准备3.1 安装Openjdk下载并安装到指定目录(如/opt/tools/installed):wget  https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u191-b12/OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gztar   -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gzmv jdk8u191-b12   /opt/tools/installed/【注】:使用系统自带Openjdk软件包可以通过执行“yum -y install java-1.8.0*”进行安装然后参考如下步骤配置JAVA_HOME环境变量;配置java环境变量,在/etc/profile文件末尾处增加下面的代码:JAVA_HOME=/opt/tools/installed/jdk8u191-b12PATH=$JAVA_HOME/bin:$PATHexport   JAVA_HOME PATH运行下面命令,使修改的环境变量生效:source   /etc/profile3.2 安装GCC等依赖项挂载OS镜像:mount -o loop   /home/NeoKylin/nsV7Update5-adv-lic-build05-aarch64.iso /mnt/NeoKylin/修改/etc/yum.repos.d/ns7-adv.repo文件,配置yum本地源:[ns7-adv-os]name=NeoKylin Linux Advanced Server 7 - Osbaseurl= file:///mnt/NeoKylingpgcheck=0gpgkey=file:///mnt/NeoKylin/RPM-GPG-KEY-neokylin-releaseenabled=1        运行下面的命令,使yum源配置生效:yum clean allyum makecacheyum安装GCC等相关依赖:sudo yum install -y snappy snappy-devel autoconf automake libtool   git gcc gcc-c++ make cmake openssl openssl-devel ncurses-devel zlib zlib-devel   bzip2 bzip2-devel bzip2-libs readline readline-devel bison zip unzip tar tcl java-1.8.0*   bison* ncurses*3.3 安装Maven下载并安装到指定目录(如/opt/tools/installed):wget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gztar -zxf apache-maven-3.5.4-bin.tar.gzmv apache-maven-3.5.4 /opt/tools/installed/修改maven环境变量,在/etc/profile文件末尾增加下面高亮代码:JAVA_HOME=/opt/tools/installed/jdk8u191-b12M2_HOME=/opt/tools/installed/apache-maven-3.5.4PATH=$M2_HOME/bin:$JAVA_HOME/bin:$PATHexport M2_HOME   JAVA_HOME PATH运行下面的命令,是修改的环境变量生效:source /etc/profile修改maven配置文件中的:本地仓路径、远程仓等:配置文件路径:/opt/tools/installed/apache-maven-3.5.4/conf/settings.xml本地仓库配置:(可选,可保持默认)<!--默认在“~/.m2/”目录下,可以按下行格式修改成你自己想保存的目录--><localRepository>/path/to/local/repo</localRepository>远程仓库配置:(可选,默认用maven2官方远程仓但访问慢,建议用国内maven仓)<!--修改成自己搭建的maven仓库,如果没有,可以使用下面的华为开源maven仓 --><mirror>  <id> huaweimaven</id>  <name> huaweicloud maven</name>  <url> https://mirrors.huaweicloud.com/repository/maven/</url>  <mirrorOf>central</mirrorOf>   </mirror>配置代理:(可选,外网环境下不用配置maven的代理)  <proxies>   <proxy>        <id>optional</id>        <active>true</active>        <protocol>http</protocol>      <username>用户名</username>      <password>密码</password>      <host>代理服务器网址</host>      <port>代理服务器端口</port>        <nonProxyHosts>local.net|some.host.com</nonProxyHosts>    </proxy>  </proxies>3.4 对gcc、g++和c++增加-fsigned-char选项1、对gcc增加-fsigned-char选项1)使用which gcc命令寻找gcc所在路径(一般位于/usr/bin/gcc)which gcc2)、更改gcc的名字(比如改成gcc-arm)mv /usr/bin/gcc   /usr/bin/gcc-arm3)、进入gcc所在目录执行vi gcc,并填入如下内容保存:#! /bin/sh /usr/bin/gcc-arm -fsigned-char "$@"cd /usr/bin/vi gcc4)、执行chmod +x gcc给脚本添加执行权限chmod +x gcc2、对g++增加-fsigned-char选项1)使用which g++命令寻找g++所在路径(一般位于/usr/bin/g++)which g++2)、更改g++的名字(比如改成g++-arm)mv /usr/bin/g++   /usr/bin/g++-arm3)、进入g++所在目录执行vi g++,并填入如下内容保存:#! /bin/sh /usr/bin/g++-arm -fsigned-char "$@"cd /usr/bin/vi g++4)、执行chmod +x g++给脚本添加执行权限chmod +x g++3、对c++增加-fsigned-char选项1)使用which c++命令寻找g++所在路径(一般位于/usr/bin/c++)which c++2)、更改c++的名字(比如改成c++-arm)mv /usr/bin/c++   /usr/bin/c++-arm3)、进入c++所在目录执行vi c++,并填入如下内容保存:#! /bin/sh /usr/bin/c++-arm -fsigned-char "$@"cd /usr/bin/vi c++4)、执行chmod +x c++给脚本添加执行权限chmod +x c++3.5 安装Protoc下载并解压源码:wget   https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gztar   -zxf protobuf-2.5.0.tar.gzcd   protobuf-2.5.0修改autogen.sh文件的第20-24行:vi   autogen.sh注释如下红框内注释内容并增加如下:curl -L   https://github.com/google/googletest/archive/release-1.5.0.tar.gz | tar zxmv googletest-release-1.5.0 gtest打ARM补丁:cp   protoc.patch ./src/google/protobuf/stubs/cd   ./src/google/protobuf/stubs/patch   -p1 < protoc.patchcd   -注:proctoc ARM补丁为protoc.patch.rar(从附件中解压获取);        编译并安装到系统默认目录:./autogen.sh   && ./configure CFLAGS='-fsigned-char' && make && make   install3.6 编译安装Snappy 1.1.3下载并解压源码:wget   https://github.com/google/snappy/releases/download/1.1.3/snappy-1.1.3.tar.gztar   zxvf snappy-1.1.3.tar.gzcd   snappy-1.1.3/执行./configure进行编译配置:./configure        执行make进行编译:make   -j32        执行make install编译安装:make   install查看编译后的结果:cd   /usr/local/lib3.7 编译安装Hadoop-Snappy通过git clone下载源码:git   clone https://github.com/electrum/hadoop-snappy.git修改src/main/native/Makefile.am文件:vi   src/main/native/Makefile.am根据如果红框内的内容进行修改         执行mvn package进行编译:mvn   package         查看编译后的jar文件:cd   target/hadoop-snappy-0.0.1-SNAPSHOT-tar/hadoop-snappy-0.0.1-SNAPSHOT/lib【注】:hadoop-snappy-0.0.1-SNAPSHOT.jar文件在hadoop-2.6.0-cdh5.15.1编译完成后,需将该文件拷贝到$HADOOP_HOME/lib库目录下;3.8 安装ant编译软件1、下载ant开源软件包wget   http://mirror.bit.edu.cn/apache//ant/binaries/apache-ant-1.9.14-bin.tar.gz        2、解压apache-ant-1.9.14-bin.tar.gztar zxvf apache-ant-1.9.14-bin.tar.gz3、进入解压路径cd apache-ant-1.9.14/4、将ANT_HOME配置到/etc/profile环境变量中vi /etc/proflile 文件最后增加如下内容export ANT_HOME=/home/ant/apache-ant-1.9.14export PATH=$PATH:$ANT_HOME/bin        5、使ANT_HOME环境变量生效source /etc/proflile  4 软件移植分析1、使用checkSo工具(获取地址:https://bbs.huaweicloud.com/forum/thread-22679-1-1.html)检查sqoop-1.99.5-cdh5.15.1对应x86的安装包或源码包是否有依赖x86的so文件,通过检查sqoop-1.99.5-cdh5.15.1的源码sqoop2-1.99.5-cdh5.15.1-src.tar.gz没有发现有依赖的x86架构的so文件。  5 依赖库编译5.1 编译snappy-java-1.0.4.1.jarSnappy是Google开源的压缩/解压缩库,snappy-java封装了其接口1)从github网站下载源码并解压wget https://codeload.github.com/xerial/snappy-java/tar.gz/snappy-java-1.0.4.1mv snappy-java-1.0.4.1   snappy-java-1.0.4.1.tar.gztar -xzvf snappy-java-1.0.4.1.tar.gzcd snappy-java-snappy-java-1.0.4.1        2)修改Makefile文件中snappy源码的下载路径:vi Makefile【注】因为默认的路径已经失效,需要如下使用新的下载路径:http://repository.timesys.com/buildsources/s/snappy/snappy-1.0.4/snappy-1.0.4.tar.gz3)安装libstdc++-static-4.8.5-28.el7.ns7.02.aarch64.rpm和glibc-static-2.17-222.el7.ns7.01.aarch64.rpmwget http://download.cs2c.com.cn/neokylin/desktop/everything/7.0/aarch64/os/Packages/libstdc++-static-4.8.5-28.el7.ns7.02.aarch64.rpmrpm -ivh   libstdc++-static-4.8.5-28.el7.ns7.02.aarch64.rpmwget http://download.cs2c.com.cn/neokylin/desktop/everything/7.0/aarch64/os/Packages/glibc-static-2.17-222.el7.ns7.01.aarch64.rpmrpm -ivh   glibc-static-2.17-222.el7.ns7.01.aarch64.rpm4)执行make编译并查看编译后的snappy-java-1.0.4.1.jarmakecd   target/5)将编译后的snappy-java-1.0.4.1.jar覆盖到本地maven仓对应路径cp   snappy-java-1.0.4.1.jar   /root/.m2/repository/org/xerial/snappy/snappy-java/1.0.4.1/5.2 编译lz4-1.3.0.jar1、从github网站下载源码并解压wget https://github.com/lz4/lz4-java/archive/1.3.0.zip   --no-check-certificateunzip   1.3.0.zip        2、进入解压目录cd lz4-java-1.3.0/        3、修改build.xml增加-fsigned-charvi build.xml增加如下内容      <compilerarg   value="-fsigned-char"/>4、执行ant编译命令进行编译ant报上图错误时执行ant ivy-bootstrap手动下载ivy-2.2.0.jar【注】:如通过ant ivy-bootstrap无法下载ivy-2.2.0.jar,可以通过wget手动下载ivy-2.2.0.jar(wget http://repo1.maven.org/maven2/org/apache/ivy/ivy/2.2.0/ivy-2.2.0.jar)        将下载的ivy-2.2.0.jar解压jar   xvf ivy-2.2.0.jar将解压后org/apache/ivy/core/settings/的ivysettings.xml拷贝到lz4-java-1.3.0编译路径/home/zdk/others/lz4/cp   org/apache/ivy/core/settings/ivysettings.xml   /home/zdk/others/lz4/lz4-java-1.3.0/修改/home/zdk/others/lz4/lz4-java-1.3.0/ivysettings.xmlvi /home/zdk/others/lz4/lz4-java-1.3.0/ivysettings.xml增加如下内容<!-- path to local maven repo and default maven layout -->        <property   name="local-maven2-pattern"   value="${user.home}/.m2/repository/[organisation]/[module]/[revision]/[module]-[revision]"   override="false" />        <!-- set resolver   chain as default -->        <settings   defaultResolver="main" />        <!-- configure   caches -->        <caches   repositoryCacheDir="${user.home}/.ivy2/cache">          <!-- do not   cache from local .m2-->          <cache   name="nocache" useOrigin="true" />          <cache   name="default" />        </caches>        <resolvers>          <chain   name="main">            <!-- as this   is not cached, even changing SNAPSHOT dependencies are resolved correctly   -->            <filesystem   name="local-maven-2" m2compatible="true"   local="true" cache="nocache">               <ivy   pattern="${local-maven2-pattern}.pom" />               <artifact   pattern="${local-maven2-pattern}(-[classifier]).[ext]" />            </filesystem>            <!-- use   repository manager as proxy to maven-central (and all other   repositories)-->            <ibiblio   name="repomanager" m2compatible="true"   root="http://maven.aliyun.com/nexus/content/groups/public/"   cache="default"/>         </chain>       </resolvers>修改build.xml增加<ivy:settings file="ivysettings.xml"/>调用编译路径的ivysettings.xml(跟build.xml同路径)vi   build.xml修改ivy.xml将1.3-SNAPSHOT为1.3.0vi   ivy.xml重新执行ant编译ant将编译的lz4-1.3.0.jar替换到本地maven仓cd   dist/cp   lz4-1.3.0.jar /root/.m2/repository/net/jpountz/lz4/lz4/1.3.0/5.3 编译jansi-1.7.jar编译依赖关系:jansi-1.7 à jansi-native-1.3先编译jansi-native-1.3和jansi1.7(编译命令使用mvn package -Dmaven.javadoc.skip=true),编译生成的jansi-1.7.jar拷贝到maven本地仓库     1)下载jansi-native-1.3源码,并解压wget https://github.com/fusesource/jansi-native/archive/jansi-native-1.3.tar.gztar   -zxvf jansi-native-1.3.tar.gzcd   jansi-native-jansi-native-1.3/        2)修改target/native-build/ configure.ac并手动执行autogen.shcd   target/native-build/chmod   -R 755 *vi   configure.ac增加AM_PROG_AR执行autogen.shaclocallibtoolize   -f./autogen.shautomake   --add-missing3)编译安装jansi-native-1.3并查看编译结果cd   ../../mvn install   -Dmaven.javadoc.skip=truecd   target/4)下载jansi-1.7源码并解压wget   https://github.com/fusesource/jansi/archive/jansi-project-1.7.tar.gztar   zxvf jansi-project-1.7.tar.gz5)进入jansi-1.7解压目录cd   jansi-jansi-project-1.7/jansi/        6)修改pom.xmlvi pom.xml 注释如下红框内容注:在pom.xml中查看dependency的jansi-native的版本,可以查看到该依赖jar包的版本号;7)使用maven编译安装并查看编译结果mvn clean   install -Dmaven.javadoc.skip=truecd   target/6 Sqoop-1.99.5-CDH5.15.1编译6.1 下载源码下载代码并解压:wget https://archive.cloudera.com/cdh5/cdh/5/sqoop2-1.99.5-cdh5.15.1-src.tar.gztar -zxvf sqoop2-1.99.5-cdh5.15.1-src.tar.gzcd sqoop2-1.99.5-cdh5.15.1/6.2 执行编译         修改pom.xml中的java版本vi   pom.xml将java版本号范围修改为包含当前系统配置的java版本号手动下载apache-tomcat-6.0.53.tar.gz并重命名为apache-tomcat.tar.gzmkdir   -p dist/target/cd   dist/target/wget http://archive.cloudera.com/tarballs/apache-tomcat-6.0.53.tar.gzmv apache-tomcat-6.0.53.tar.gz   apache-tomcat.tar.gz执行编译并查看编译后的结果:export MAVEN_OPTS="-Xms1024m -Xmx12G -XX:PermSize=4096m"mvn install -Phadoop-2 -DskipTests -Pbinary   -Prelease,security,native,hadoop-snappy -Drat.numUnapprovedLicenses=200   -Dhadoop.profile=2.0 -Dhadoop-snappy.version=0.0.1-SNAPSHOT -Ucd dist/target/6.3 注意点    1)编译过程中遇到问题可以参考9 FAQ    2)第一次编译的时候会从远程maven仓库下载jar包到本地仓库,但是有几个jar包是X86的,所以在sqoop编译完成及第5章的jar包编译完成后,需要将第5章编译的jar包替换掉本地仓库中相应路径的jar包,然后重新编译一次sqoop。第二次编译会很快,所以不用担心。 7 验证1、编译验证使用checkSo工具(获取地址:https://bbs.huaweicloud.com/forum/thread-22679-1-1.html)检查编译后的dist/target/sqoop-1.99.5-cdh5.15.1-bin-hadoop200.tar.gz中是否不再含有依赖的x86架构的so文件,检查方法参考工具中的 《CheckSo使用说明.docx》,如果还有依赖的x86架构的so文件,则需要继续完成对应jar包的编译,直到无依赖的x86架构的so文件后,再次编译该组件并通过checkSo工具检查确认,编译后的组件包不再有依赖的x86架构的so文件则表明编译成功。        通过checkSo工具检查dist/target/路径下编译后的sqoop-1.99.5-cdh5.15.1-bin-hadoop200.tar.gz发现存在如下依赖的so文件:        上图依赖库的编译见 5 依赖库编译 章节(需要编译jansi-1.7.jar、lz4-1.3.0.jar、snappy-java-1.0.4.1.jar),完成依赖库编译后需要重新编译前面编译包含依赖库的sqoop-1.99.5-cdh5.15.1-bin-hadoop200.tar.gz,直到编译后的sqoop-1.99.5-cdh5.15.1-bin-hadoop200.tar.gz通过checkSo工具检查不再有依赖so等文件;2、功能验证暂无。 8 参考信息https://archive.cloudera.com/cdh5/cdh/5/sqoop2-1.99.5-cdh5.15.1/http://sqoop.apache.org/9 FAQ9.1 git clone报证书错误9.1.1 问题现象9.1.2 解决方法git config --global http."sslVerify" false9.2 wget下载https链接报证书错误9.2.1 问题现象9.2.2 解决方法在下载命令后面跟参数--no-check-certificate9.3 sqoop编译过程下载apache-tomcat-6.0.53.tar.gz失败9.3.1 问题现象9.3.2 解决方法在服务器下载apache-tomcat-6.0.53.tar.gz失败,报这个错误时手动下载“http://archive.cloudera.com/tarballs/apache-tomcat-6.0.53.tar.gz”并上传到“sqoop-1.99.5-cdh5.15.1/dist/target/”路径下并重命名为apache-tomcat.tar.gz。cd   dist/target/wget http://archive.cloudera.com/tarballs/apache-tomcat-6.0.53.tar.gzmv   apache-tomcat-6.0.53.tar.gz apache-tomcat.tar.gz 9.4 编译sqoop过程中报“java.lang.OutofMemoryError: PermGen space”错误9.4.1 问题现象 9.4.2 解决方法编译过程中内存不足导致异常退出,执行maven编译前指定maven编译内存,如下:export MAVEN_OPTS="-Xms1024m -Xmx12G -XX:PermSize=4096m"mvn install -Phadoop-2 -DskipTests -Pbinary -Prelease,security,native,hadoop-snappy -Drat.numUnapprovedLicenses=200 -Dhadoop.profile=2.0 -Dhadoop-snappy.version=0.0.1-SNAPSHOT -U9.5 编译sqoop时Detected JDK Version: 1.8.0-191 is not in the allowed range [1.7.0,1.7.1000}].9.5.1 问题现象 9.5.2 解决方法根据问题信息,需要手动进入相应目录,手动执行相应命令安装。vi   pom.xml将java版本号范围修改为包含当前系统配置的java版本号【来自转载】 
  • [技术干货] [大数据]CDH5.15.1(x86)--hbase相关组件的移植指南【中标麒麟】
    1 CDH简介CDH(Cloudera’s Distribution Including Apache Hadoop)是Cloudera的开源大数据平台,基于Web的用户界面,支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、Hbase、Zookeeper、Sqoop,简化了大数据平台的安装、使用难度。本文主要是描述如何将CDH 5.15.1的x86版本中的hbase相关组件移植到TaiShan服务器上,包含编译部分。CDH的其他组件如果需要移植,也可以参考本文中描述的方法操作。官方链接:http://archive.cloudera.com/cdh5/cdh/5/hbase/类别:大数据语言: JAVA 2 软硬件环境类别子项版本获取地址(方法) 硬件CPUKunpeng 920iBMC网络Ethernet-10GEiBMC存储SATA 4TiBMC内存xxG   xxxMHziBMCOSNeoKylin7.5cat   /etc/neokylin-releaseKernel4.14.0cat   /proc/version 软件GCC4.8.5gcc -vMaven3.5.4参考下面安装说明JDK1.8.0_191参考下面安装说明Protoc2.5.0参考下面安装说明3 编译环境准备3.1 安装Openjdk下载并安装到指定目录(如/opt/tools/installed):wget  https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u191-b12/OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gztar   -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gzmv jdk8u191-b12   /opt/tools/installed/【注】:使用系统自带Openjdk软件包可以通过执行“yum -y install java-1.8.0*”进行安装然后参考如下步骤配置JAVA_HOME环境变量;配置java环境变量,在/etc/profile文件末尾处增加下面的代码:JAVA_HOME=/opt/tools/installed/jdk8u191-b12PATH=$JAVA_HOME/bin:$PATHexport   JAVA_HOME PATH运行下面命令,使修改的环境变量生效:source   /etc/profile3.2 安装GCC等依赖项挂载OS镜像:mount -o loop   /home/NeoKylin/nsV7Update5-adv-lic-build05-aarch64.iso /mnt/NeoKylin/修改/etc/yum.repos.d/ns7-adv.repo文件,配置yum本地源:[ns7-adv-os]name=NeoKylin Linux Advanced Server 7 - Osbaseurl= file:///mnt/NeoKylingpgcheck=0gpgkey=file:///mnt/NeoKylin/RPM-GPG-KEY-neokylin-releaseenabled=1        运行下面的命令,使yum源配置生效:yum clean allyum makecacheyum安装GCC等相关依赖:sudo yum install -y snappy snappy-devel autoconf automake libtool   git gcc gcc-c++ make cmake openssl openssl-devel ncurses-devel zlib zlib-devel   bzip2 bzip2-devel bzip2-libs readline readline-devel bison zip unzip tar tcl java-1.8.0*   bison* ncurses*3.3 安装Maven下载并安装到指定目录(如/opt/tools/installed):wget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gztar -zxf apache-maven-3.5.4-bin.tar.gzmv apache-maven-3.5.4 /opt/tools/installed/修改maven环境变量,在/etc/profile文件末尾增加下面高亮代码:JAVA_HOME=/opt/tools/installed/jdk8u191-b12M2_HOME=/opt/tools/installed/apache-maven-3.5.4PATH=$M2_HOME/bin:$JAVA_HOME/bin:$PATHexport M2_HOME   JAVA_HOME PATH运行下面的命令,是修改的环境变量生效:source /etc/profile修改maven配置文件中的:本地仓路径、远程仓等:配置文件路径:/opt/tools/installed/apache-maven-3.5.4/conf/settings.xml本地仓库配置:(可选,可保持默认)<!--默认在“~/.m2/”目录下,可以按下行格式修改成你自己想保存的目录--><localRepository>/path/to/local/repo</localRepository>远程仓库配置:(可选,默认用maven2官方远程仓但访问慢,建议用国内maven仓)<!--修改成自己搭建的maven仓库,如果没有,可以使用下面的华为开源maven仓 --><mirror>  <id> huaweimaven</id>  <name> huaweicloud maven</name>  <url> https://mirrors.huaweicloud.com/repository/maven/</url>  <mirrorOf>central</mirrorOf>   </mirror>配置代理:(可选,外网环境下不用配置maven的代理)  <proxies>   <proxy>        <id>optional</id>        <active>true</active>        <protocol>http</protocol>      <username>用户名</username>      <password>密码</password>      <host>代理服务器网址</host>      <port>代理服务器端口</port>        <nonProxyHosts>local.net|some.host.com</nonProxyHosts>    </proxy>  </proxies>3.4 对gcc、g++和c++增加-fsigned-char选项1、对gcc增加-fsigned-char选项1)使用which gcc命令寻找gcc所在路径(一般位于/usr/bin/gcc)which gcc2)、更改gcc的名字(比如改成gcc-arm)mv /usr/bin/gcc   /usr/bin/gcc-arm3)、进入gcc所在目录执行vi gcc,并填入如下内容保存:#! /bin/sh /usr/bin/gcc-arm -fsigned-char "$@"cd /usr/bin/vi gcc4)、执行chmod +x gcc给脚本添加执行权限chmod +x gcc2、对g++增加-fsigned-char选项1)使用which g++命令寻找g++所在路径(一般位于/usr/bin/g++)which g++2)、更改g++的名字(比如改成g++-arm)mv /usr/bin/g++   /usr/bin/g++-arm3)、进入g++所在目录执行vi g++,并填入如下内容保存:#! /bin/sh /usr/bin/g++-arm -fsigned-char "$@"cd /usr/bin/vi g++4)、执行chmod +x g++给脚本添加执行权限chmod +x g++3、对c++增加-fsigned-char选项1)使用which c++命令寻找g++所在路径(一般位于/usr/bin/c++)which c++2)、更改c++的名字(比如改成c++-arm)mv /usr/bin/c++   /usr/bin/c++-arm3)、进入c++所在目录执行vi c++,并填入如下内容保存:#! /bin/sh /usr/bin/c++-arm -fsigned-char "$@"cd /usr/bin/vi c++4)、执行chmod +x c++给脚本添加执行权限chmod +x c++3.5 安装Protoc下载并解压源码:wget   https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gztar   -zxf protobuf-2.5.0.tar.gzcd   protobuf-2.5.0修改autogen.sh文件的第20-24行:vi   autogen.sh注释如下红框内注释内容并增加如下:curl -L   https://github.com/google/googletest/archive/release-1.5.0.tar.gz | tar zxmv googletest-release-1.5.0 gtest打ARM补丁:cp   protoc.patch ./src/google/protobuf/stubs/cd   ./src/google/protobuf/stubs/patch   -p1 < protoc.patchcd   -注:proctoc ARM补丁为protoc.patch.rar(从附件中解压获取);        编译并安装到系统默认目录:./autogen.sh   && ./configure CFLAGS='-fsigned-char' && make && make   install3.6 编译安装Snappy 1.1.3下载并解压源码:wget   https://github.com/google/snappy/releases/download/1.1.3/snappy-1.1.3.tar.gztar   zxvf snappy-1.1.3.tar.gzcd   snappy-1.1.3/执行./configure进行编译配置:./configure        执行make进行编译:make   -j32        执行make install编译安装:make   install查看编译后的结果:cd   /usr/local/lib3.7 编译安装Hadoop-Snappy通过git clone下载源码:git   clone https://github.com/electrum/hadoop-snappy.git修改src/main/native/Makefile.am文件:vi   src/main/native/Makefile.am根据如果红框内的内容进行修改         执行mvn package进行编译:mvn   package         查看编译后的jar文件:cd   target/hadoop-snappy-0.0.1-SNAPSHOT-tar/hadoop-snappy-0.0.1-SNAPSHOT/lib【注】:hadoop-snappy-0.0.1-SNAPSHOT.jar文件在hadoop-2.6.0-cdh5.15.1编译完成后,需将该文件拷贝到$HADOOP_HOME/lib库目录下;3.8 安装ant编译软件1、下载ant开源软件包wget   http://mirror.bit.edu.cn/apache//ant/binaries/apache-ant-1.9.14-bin.tar.gz        2、解压apache-ant-1.9.14-bin.tar.gztar zxvf apache-ant-1.9.14-bin.tar.gz3、进入解压路径cd apache-ant-1.9.14/4、将ANT_HOME配置到/etc/profile环境变量中vi /etc/proflile 文件最后增加如下内容export ANT_HOME=/home/ant/apache-ant-1.9.14export PATH=$PATH:$ANT_HOME/bin        5、使ANT_HOME环境变量生效source /etc/proflile  4 软件移植分析1、使用checkSo工具(获取地址:https://bbs.huaweicloud.com/forum/thread-22679-1-1.html)检查hbase-1.2.0-cdh5.15.1对应x86的安装包或源码包是否有依赖x86的so文件,通过检查hbase-1.2.0-cdh5.15.1的源码hbase-1.2.0-cdh5.15.1-src.tar.gz没有发现有依赖的x86架构的so文件。  5 依赖库编译5.1 编译snappy-java-1.0.4.1.jarSnappy是Google开源的压缩/解压缩库,snappy-java封装了其接口1)从github网站下载源码并解压wget https://codeload.github.com/xerial/snappy-java/tar.gz/snappy-java-1.0.4.1mv snappy-java-1.0.4.1   snappy-java-1.0.4.1.tar.gztar -xzvf snappy-java-1.0.4.1.tar.gzcd snappy-java-snappy-java-1.0.4.1        2)修改Makefile文件中snappy源码的下载路径:vi Makefile【注】因为默认的路径已经失效,需要如下使用新的下载路径:http://repository.timesys.com/buildsources/s/snappy/snappy-1.0.4/snappy-1.0.4.tar.gz3)安装libstdc++-static-4.8.5-28.el7.ns7.02.aarch64.rpm和glibc-static-2.17-222.el7.ns7.01.aarch64.rpmwget http://download.cs2c.com.cn/neokylin/desktop/everything/7.0/aarch64/os/Packages/libstdc++-static-4.8.5-28.el7.ns7.02.aarch64.rpmrpm -ivh   libstdc++-static-4.8.5-28.el7.ns7.02.aarch64.rpmwget http://download.cs2c.com.cn/neokylin/desktop/everything/7.0/aarch64/os/Packages/glibc-static-2.17-222.el7.ns7.01.aarch64.rpmrpm -ivh   glibc-static-2.17-222.el7.ns7.01.aarch64.rpm4)执行make编译并查看编译后的snappy-java-1.0.4.1.jarmakecd   target/5)将编译后的snappy-java-1.0.4.1.jar覆盖到本地maven仓对应路径cp   snappy-java-1.0.4.1.jar   /root/.m2/repository/org/xerial/snappy/snappy-java/1.0.4.1/5.2 编译leveldbjni-all-1.8.jarLeveldb是一个google实现的非常高效的kv数据库;官方链接:https://github.com/google/leveldb依据网上资料,编译leveldbjni-all-1.8.jar,需要先将leveldb和snappy编译成静态库,再将两个静态库编译进leveldbjni.so里面,最后生成leveldbjni-all-1.8.jar压缩包。注:如下编译snappy-1.1.3、leveldb-1.20和leveldbjni需要在同一个ssh窗口执行,切换ssh会导致如下临时定义的SNAPPY_HOME和LEVELDB_HOME变量失效,如发生ssh窗口异常,编译leveldbjni时需要先定义临时SNAPPY_HOME和LEVELDB_HOME变量(变量路径要正确);5.2.1 编译snappy-1.1.3wget https://github.com/google/snappy/archive/1.1.3.tar.gztar   -zxvf 1.1.3.tar.gzcd   snappy-1.1.3/./autogen.sh./configure   --with-picmake   -j20export   SNAPPY_HOME=`pwd`cp   .libs/libsnappy.a .5.2.2 编译leveldb-1.201)源码下载并解压wget https://github.com/google/leveldb/archive/v1.20.tar.gztar   -zxvf v1.20.tar.gzcd   leveldb-1.20        2)修改build_detect_platformvi   build_detect_platform 注释如下红框内的3行注释内容,并添加如下三行:echo   "PLATFORM_CCFLAGS=$PLATFORM_CCFLAGS $PLATFORM_SHARED_CFLAGS"   >> $OUTPUTecho   "PLATFORM_CXXFLAGS=$PLATFORM_CXXFLAGS $PLATFORM_SHARED_CFLAGS"   >> $OUTPUTecho   "PLATFORM_SHARED_CFLAGS=" >> $OUTPUT3)修改Makefile,增加-fPIC的编译选项vi   Makefile增加-fPIC4)对比附件补丁leveldbpatch.zip,将代码合入(替换源码压缩包对应路径中的文件即可):5)执行编译make   -j20export   LEVELDB_HOME=`pwd`cp   out-static/libleveldb.a . 5.2.3 编译leveldbjni1)通过git获取源码git   clone https://github.com/fusesource/leveldbjni.gitcd   leveldbjniexport   LEVELDBJNI_HOME=`pwd`        2)修改pom.xmlvi   pom.xml 注释如下红框内注释内容,并增加如下两行    <module>leveldbjni-linux64</module>      <module>leveldbjni-all</module>3)修改leveldbjni-all/pom.xml文件vi   leveldbjni-all/pom.xml 注释如下红框内注释内容,并按红框内框内容进行修改4)修改所有pom.xml文件中的版本号将所有pom.xml文件中的版本“99-master-SNAPSHOT”改为“1.8”:sed -i   's/99-master-SNAPSHOT/1.8/g' `find . -name pom.xml`5)编译选项增加 -fsigned-charvim leveldbjni/src/main/native-package/Makefile.in增加-fsigned-char6)修改automake版本号vi   leveldbjni/src/main/native-package/aclocal.m4vi   leveldbjni/src/main/native-package/configure把automake版本号从1.14改成1.13,注意不要改成1.13.4(根据系统安装automake版本号进行修改)7)执行maven编译并查看编译结果export   LIBRARY_PATH=${SNAPPY_HOME};export C_INCLUDE_PATH=${LIBRARY_PATH};export   CPLUS_INCLUDE_PATH=${LIBRARY_PATH}mvn   clean package -P download -P linux64-aarch64 –DskipTestscd   leveldbjni-all/target/注:执行maven编译会自动编译五个模块:leveldbjni-project、leveldbjni、leveldbjni-linux64、leveldbjni-linux64-aarch64、leveldbjni-all;8)将编译后的leveldbjni-all-1.8.jar复制到本地maven仓对应路径进行覆盖cp   leveldbjni-all-1.8.jar   /root/.m2/repository/org/fusesource/leveldbjni/leveldbjni-all/1.8/5.3 编译netty-all-4.0.23.Final.jar编译依赖关系:netty-4.0.23.Final à netty-tcnative-1.1.30.Fork2 à apr-1.5.2将编译生成的netty-tcnative-1.1.30.Fork2.jar拷贝到maven本地仓库,然后编译netty-all-4.0.23.Final.jar 1)下载apr-1.5.2源码,并解压wget https://archive.apache.org/dist/apr/apr-1.5.2.tar.gztar   zxvf apr-1.5.2.tar.gzcd apr-1.5.2/        2)编译apr-1.5.2并查看编译结果./configuremakemake   install3)下载netty-tcnative-1.1.30.Fork2源码,并解压进入解压路径wget   https://codeload.github.com/netty/netty-tcnative/tar.gz/netty-tcnative-1.1.30.Fork2mv   netty-tcnative-1.1.30.Fork2 netty-tcnative-1.1.30.Fork2.tar.gztar   zxvf netty-tcnative-1.1.30.Fork2.tar.gzcd   netty-tcnative-netty-tcnative-1.1.30.Fork2/        4)修改pom.xml vi pom.xml 增加如下内容              <configureArgs>                  <configureArg>CFLAGS=-fsigned-char</configureArg>              </configureArgs>5)编译netty-tcnative-1.1.30.Fork2mvn   install注:执行mvn install编译安装会直接替换本地maven仓中的netty-tcnative-1.1.30.Fork2-linux-aarch_64.jar6)下载netty-4.0.23.Final源码,并解压进入解压目录wget   https://github.com/netty/netty/archive/netty-4.0.23.Final.tar.gztar   zxvf netty-4.0.23.Final.tar.gzcd   netty-netty-4.0.23.Final/        7)修改transport-native-epoll/pom.xmlvi transport-native-epoll/pom.xml 增加如下内容              <configureArgs>                  <configureArg>CFLAGS=-fsigned-char</configureArg>              </configureArgs>8)使用maven编译并查看编译结果mvn   package -DskipTestscd all/target/9)将编译后的netty-all-4.0.23.Final.jar拷贝到本地maven仓对应路径cp   netty-all-4.0.23.Final.jar   /root/.m2/repository/io/netty/netty-all/4.0.23.Final/ 5.4 编译jruby-cloudera-1.0.0.jar5.4.1 编译libjruby-cext.solibjruby-cext.so包含在jruby-complete.jar中,需要先编译jruby-complete.jar,先在x86服务器上编译,然后返回arm服务器继续编译;1、在x86服务器上编译1)从github网站下载jruby-1.6.8.tar.gz源码并解压wget   https://github.com/jruby/jruby/archive/1.6.8.tar.gztar zxvf 1.6.8.tar.gzcd jruby-1.6.8/        2)打补丁(见附件jruby-complete-1.6.8-01.rar,解压后获得jruby-complete-1.6.8-01.patch)patch -p0 <   jruby-complete-1.6.8-01.patch检查打补丁是否跟patch内容一致:vi build.xmlvi   cext/src/Makefilevi   maven/jruby-complete/pom.xmlvi maven/jruby-core/pom.xmlvi   maven/jruby/pom.xmlvi maven/pom.xmlvi pom.xml3)在jruby-1.6.8.tar.gz源码解压路径创建jffi-native文件夹,下载jffi-1.2.14-native.jarmkdir jffi-nativecd jffi-native/wget   http://repo1.maven.org/maven2/com/github/jnr/jffi/1.2.14/jffi-1.2.14-native.jarjar xvf   jffi-1.2.14-native.jarcd jni/4)删除里面除了aarch64-Linux目录外的所有目录rm -rf   arm* D* i* p* s* x*5)重新打包jffi-aarch64_Linux.jarjar   -cvf jffi-aarch64_Linux.jar aarch64-Linux/6)将jffi-aarch64_Linux.jar添加到jruby-1.6.8的build_lib路径中,然后执行ant编译cp jffi-aarch64_Linux.jar   ../../build_lib/cd ../../ant7)回上层路径将整个jruby-1.6.8目录打包cd ../tar   zcvf jruby-1.6.8.tar.gz jruby-1.6.88)将打包后jruby-1.6.8.tar.gz传到arm服务器继续编译2、在arm服务器上编译1)解压从x86编译后的jruby-1.6.8.tar.gz并进入解压路径tar   zxvf jruby-1.6.8.tar.gzcd jruby-1.6.8/2)编译extant   cext3)编译jar-jruby-completeant   jar-jruby-complete4)进入lib路径,解压jruby-complete.jar并进入解压后的cext/native/路径cd   lib/jar   xvf jruby-complete.jarcd   cext/native/5)进入路径cd   aarch64-Linux/6)查看编译后的libjruby-cext.so是否为aarch64readelf   -h libjruby-cext.so | grep -i machine 5.4.2 编译libjffi-1.0.so1)改用已经有aarch64的jffi-1.2.14-native.jar中的libjffi-1.2.so打包到jruby-cloudera-1.0.0.jar中,进入本地maven仓jruby-cloudera-1.0.0.jar所在路径并解压jruby-cloudera-1.0.0.jarcd /root/.m2/repository/org/jruby/jruby-cloudera/1.0.0/mkdir testcp jruby-cloudera-1.0.0.jar   test/cd test/jar xvf jruby-cloudera-1.0.0.jar2)下载jffi-1.2.14-native.jar并解压mkdir -p   /home/test/libjfficd /home/test/libjffi/wget   http://repo1.maven.org/maven2/com/github/jnr/jffi/1.2.14/jffi-1.2.14-native.jarjar xvf   jffi-1.2.14-native.jar3)将libjffi-1.2.so拷贝到/root/.m2/repository/org/jruby/jruby-cloudera/1.0.0/test/jni/aarch64-Linux/路径下cp jni/aarch64-Linux/libjffi-1.2.so   /root/.m2/repository/org/jruby/jruby-cloudera/1.0.0/test/jni/aarch64-Linux/cd /root/.m2/repository/org/jruby/jruby-cloudera/1.0.0/test/jni/aarch64-Linux/4)删除libjffi-1.0.sorm -rf   libjffi-1.0.so5)返回/root/.m2/repository/org/jruby/jruby-cloudera/1.0.0/test路径,压缩jruby-cloudera-1.0.0.jar并将其拷贝到/root/.m2/repository/org/jruby/jruby-cloudera/1.0.0路径下cd ../../jar   cvf jruby-cloudera-1.0.0.jar builtin cext com jay jline jni jnr jruby   META-INF org YechtService.cp   jruby-cloudera-1.0.0.jar ../6 Hbase-1.2.0-CDH5.15.1编译6.1 下载源码下载代码并解压:wget https://archive.cloudera.com/cdh5/cdh/5/hbase-1.2.0-cdh5.15.1-src.tar.gztar -zxvf hbase-1.2.0-cdh5.15.1-src.tar.gz6.2 打patch补丁进入hbase源码解压目录:cd hbase-1.2.0-cdh5.15.1/在解压路径执行如下命令打如下附件patch补丁(也可通过在编译环境执行wget https://issues.apache.org/jira/secure/attachment/12899868/HBASE-19188.branch-1.2.002.patch获取):export   MAVEN_OPTS="-Xms1024m -Xmx10G -XX:PermSize=4096m"yum install patchpatch -p1 <   HBASE-19188.branch-1.2.002.patch注:附件patch补丁名为HBASE-19188.branch-1.2.002.patch.rar6.3 执行编译         修改pom.xml中findbugs-maven-plugin的版本号(从3.0.0改为3.0.4):vim pom.xml将版本号从3.0.0改为3.0.4修改pom.xml,注释check-jar-contents相关内容:vim pom.xml注释如下红框内容执行编译并查看编译后的结果(每次编译前需要指定内存大小):export MAVEN_OPTS="-Xms1024m -Xmx12G   -XX:PermSize=4096m"mvn clean install assembly:single -DskipTests -Prelease,security,native,hadoop-snappy -Drat.numUnapprovedLicenses=200 -Dhadoop.profile=2.0 -Dhadoop-snappy.version=0.0.1-SNAPSHOTcd hbase-assembly/target/6.4 注意点    1)编译过程中遇到问题可以参考9 FAQ    2)第一次编译的时候会从远程maven仓库下载jar包到本地仓库,但是有几个jar包是X86的,所以在hbase编译完成及第5章的jar包编译完成后,需要将第5章编译的jar包替换掉本地仓库中相应路径的jar包,然后重新编译一次hbase。第二次编译会很快,所以不用担心。 7 验证1、编译验证使用checkSo工具(获取地址:https://bbs.huaweicloud.com/forum/thread-22679-1-1.html)检查编译后的hbase-assembly/target/hbase-1.2.0-cdh5.15.1-bin.tar.gz中是否不再含有依赖的x86架构的so文件,检查方法参考工具中的 《CheckSo使用说明.docx》,如果还有依赖的x86架构的so文件,则需要继续完成对应jar包的编译,直到无依赖的x86架构的so文件后,再次编译该组件并通过checkSo工具检查确认,编译后的组件包不再有依赖的x86架构的so文件则表明编译成功。        通过checkSo工具检查hbase-assembly/target/路径下编译后的hbase-1.2.0-cdh5.15.1-bin.tar.gz发现存在如下依赖的so文件:        上图依赖库的编译见 5 依赖库编译 章节(需要编译jruby-cloudera-1.0.0.jar、leveldbjni-all-1.8.jar、netty-all-4.0.23.Final.jar、snappy-java-1.0.4.1.jar),完成依赖库编译后需要重新编译前面编译包含依赖库的hbase-1.2.0-cdh5.15.1-bin.tar.gz,直到编译后的hbase-1.2.0-cdh5.15.1-bin.tar.gz通过checkSo工具检查不再有依赖so等文件;2、功能验证暂无。 8 参考信息http://archive.cloudera.com/cdh5/cdh/5/hbase/https://hbase.apache.org/ 9 FAQ9.1 git clone报证书错误9.1.1 问题现象9.1.2 解决方法git config --global http."sslVerify" false9.2 wget下载https链接报证书错误9.2.1 问题现象9.2.2 解决方法在下载命令后面跟参数--no-check-certificate9.3 编译leveldbjni报automake命令找不到9.3.1 问题现象9.3.2 解决方法没有安装automake-1.14,可以使用yum install automake安装。如果yum源上找的没有1.14的版本,则需要修改leveldbjni-linux64/target/native-build下的配置文件。修改leveldbjni/src/main/native-package/configure和leveldbjni/src/main/native-package/aclocal.m4,将里面的1.14改成服务器上安装的automake版本,比如1.13。9.4 编译leveldbjni时error: required file 'autotools/compile' not found9.4.1 问题现象9.4.2 解决方法根据问题信息,需要手动进入相应目录,手动执行相应命令安装。cd leveldbjni-linux64/target/native-buildautomake   --add-missing9.5 hbase编译过程报“Can't find bundle for base name org.apache.jasper.resources.LocalStrings“错误9.5.1 问题现象执行“mvn package -DskipTests assembly:single”编译hbase-1.3.0-src.tar.gz时报“Can't find bundle for base name org.apache.jasper.resources.LocalStrings, locale en_US”错误;9.5.2 解决方法需要打HBASE-19188.branch-1.2.002.patch补丁,步骤如下:1、在hbase-1.3.0-src.tar.gz解压路径执行“wget https://issues.apache.org/jira/secure/attachment/12899868/HBASE-19188.branch-1.2.002.patch”获取patch补丁2、执行“patch -p1 < HBASE-19188.branch-1.2.002.patch”打pathch补丁;3、打完patch补丁后执行“mvn clean package -DskipTests assembly:single”继续编译;9.6 hbase编译过程报“Cannot assign configuration entry ‘pluginArtifacts’ with value ‘${plugin.artifacts}’ of type “错误9.6.1 问题现象9.6.2 解决方法将pom.xml中的findbugs-maven-plugin的版本从3.0.0改为3.0.4。9.7 hbase编译过程报“Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2:exec (check-jar-contents) on project hbase-shaded-check-invariants: Command execution failed.: Process exited with an error: 1(Exit value: 1) “错误9.7.1 问题现象9.7.2 解决方法修改pom.xml注释如下红框部分。9.8 hbase编译过程报报“[Help 1] http://cwiki.apace.org/confluence/display/MAVEN/OutofMemoryError“错误9.8.1 问题现象9.8.2 解决方法编译过程报内存不足,则每次maven编译前指定java内存大小:export MAVEN_OPTS="-Xms1024m -Xmx12G -XX:PermSize=4096m"   【来自转载】
  • [技术干货] 【大数据】CDH5.15.1(x86)--hadoop相关组件的移植指南【中标麒麟7.5】
    1 CDH简介CDH(Cloudera’s Distribution Including Apache Hadoop)是Cloudera的开源大数据平台,基于Web的用户界面,支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、Hbase、Zookeeper、Sqoop,简化了大数据平台的安装、使用难度。本文主要是描述如何将CDH 5.15.1的x86版本中的hadoop相关组件移植到TaiShan服务器上,包含编译部分。CDH的其他组件如果需要移植,也可以参考本文中描述的方法操作。官方链接:http://archive.cloudera.com/cdh5/cdh/5/hadoop/类别:大数据语言: JAVA 2 软硬件环境类别子项版本获取地址(方法) 硬件CPUKunpeng 920iBMC网络Ethernet-10GEiBMC存储SATA 4TiBMC内存xxG   xxxMHziBMCOSNeoKylin7.5cat   /etc/neokylin-releaseKernel4.14.0cat   /proc/version 软件GCC4.8.5gcc -vMaven3.5.4参考下面安装说明JDK1.8.0_191参考下面安装说明Protoc2.5.0参考下面安装说明3 编译环境准备3.1 安装Openjdk下载并安装到指定目录(如/opt/tools/installed):wget  https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u191-b12/OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gztar   -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gzmv jdk8u191-b12   /opt/tools/installed/【注】:使用系统自带Openjdk软件包可以通过执行“yum -y install java-1.8.0*”进行安装然后参考如下步骤配置JAVA_HOME环境变量;配置java环境变量,在/etc/profile文件末尾处增加下面的代码:JAVA_HOME=/opt/tools/installed/jdk8u191-b12PATH=$JAVA_HOME/bin:$PATHexport   JAVA_HOME PATH运行下面命令,使修改的环境变量生效:source   /etc/profile3.2 安装GCC等依赖项挂载OS镜像:mount -o loop   /home/NeoKylin/nsV7Update5-adv-lic-build05-aarch64.iso /mnt/NeoKylin/修改/etc/yum.repos.d/ns7-adv.repo文件,配置yum本地源:[ns7-adv-os]name=NeoKylin Linux Advanced Server 7 - Osbaseurl= file:///mnt/NeoKylingpgcheck=0gpgkey=file:///mnt/NeoKylin/RPM-GPG-KEY-neokylin-releaseenabled=1        运行下面的命令,使yum源配置生效:yum clean allyum makecacheyum安装GCC等相关依赖:sudo yum install -y snappy snappy-devel autoconf automake libtool   git gcc gcc-c++ make cmake openssl openssl-devel ncurses-devel zlib zlib-devel   bzip2 bzip2-devel bzip2-libs readline readline-devel bison zip unzip tar tcl java-1.8.0*   bison* ncurses*3.3 安装Maven下载并安装到指定目录(如/opt/tools/installed):wget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gztar -zxf apache-maven-3.5.4-bin.tar.gzmv apache-maven-3.5.4 /opt/tools/installed/修改maven环境变量,在/etc/profile文件末尾增加下面高亮代码:JAVA_HOME=/opt/tools/installed/jdk8u191-b12M2_HOME=/opt/tools/installed/apache-maven-3.5.4PATH=$M2_HOME/bin:$JAVA_HOME/bin:$PATHexport M2_HOME   JAVA_HOME PATH运行下面的命令,是修改的环境变量生效:source /etc/profile修改maven配置文件中的:本地仓路径、远程仓等:配置文件路径:/opt/tools/installed/apache-maven-3.5.4/conf/settings.xml本地仓库配置:(可选,可保持默认)<!--默认在“~/.m2/”目录下,可以按下行格式修改成你自己想保存的目录--><localRepository>/path/to/local/repo</localRepository>远程仓库配置:(可选,默认用maven2官方远程仓但访问慢,建议用国内maven仓)<!--修改成自己搭建的maven仓库,如果没有,可以使用下面的华为开源maven仓 --><mirror>  <id> huaweimaven</id>  <name> huaweicloud maven</name>  <url> https://mirrors.huaweicloud.com/repository/maven/</url>  <mirrorOf>central</mirrorOf>   </mirror>配置代理:(可选,外网环境下不用配置maven的代理)  <proxies>   <proxy>        <id>optional</id>        <active>true</active>        <protocol>http</protocol>      <username>用户名</username>      <password>密码</password>      <host>代理服务器网址</host>      <port>代理服务器端口</port>        <nonProxyHosts>local.net|some.host.com</nonProxyHosts>    </proxy>  </proxies>3.4 对gcc、g++和c++增加-fsigned-char选项1、对gcc增加-fsigned-char选项1)使用which gcc命令寻找gcc所在路径(一般位于/usr/bin/gcc)which gcc2)、更改gcc的名字(比如改成gcc-arm)mv /usr/bin/gcc   /usr/bin/gcc-arm3)、进入gcc所在目录执行vi gcc,并填入如下内容保存:#! /bin/sh /usr/bin/gcc-arm -fsigned-char "$@"cd /usr/bin/vi gcc4)、执行chmod +x gcc给脚本添加执行权限chmod +x gcc2、对g++增加-fsigned-char选项1)使用which g++命令寻找g++所在路径(一般位于/usr/bin/g++)which g++2)、更改g++的名字(比如改成g++-arm)mv /usr/bin/g++   /usr/bin/g++-arm3)、进入g++所在目录执行vi g++,并填入如下内容保存:#! /bin/sh /usr/bin/g++-arm -fsigned-char "$@"cd /usr/bin/vi g++4)、执行chmod +x g++给脚本添加执行权限chmod +x g++3、对c++增加-fsigned-char选项1)使用which c++命令寻找g++所在路径(一般位于/usr/bin/c++)which c++2)、更改c++的名字(比如改成c++-arm)mv /usr/bin/c++   /usr/bin/c++-arm3)、进入c++所在目录执行vi c++,并填入如下内容保存:#! /bin/sh /usr/bin/c++-arm -fsigned-char "$@"cd /usr/bin/vi c++4)、执行chmod +x c++给脚本添加执行权限chmod +x c++3.5 安装Protoc下载并解压源码:wget   https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gztar   -zxf protobuf-2.5.0.tar.gzcd   protobuf-2.5.0修改autogen.sh文件的第20-24行:vi   autogen.sh注释如下红框内注释内容并增加如下:curl -L   https://github.com/google/googletest/archive/release-1.5.0.tar.gz | tar zxmv googletest-release-1.5.0 gtest打ARM补丁:cp   protoc.patch ./src/google/protobuf/stubs/cd   ./src/google/protobuf/stubs/patch   -p1 < protoc.patchcd   -注:proctoc ARM补丁为protoc.patch.rar(从附件中解压获取);        编译并安装到系统默认目录:./autogen.sh   && ./configure CFLAGS='-fsigned-char' && make && make   install3.6 编译安装Snappy 1.1.3下载并解压源码:wget   https://github.com/google/snappy/releases/download/1.1.3/snappy-1.1.3.tar.gztar   zxvf snappy-1.1.3.tar.gzcd   snappy-1.1.3/执行./configure进行编译配置:./configure        执行make进行编译:make   -j32        执行make install编译安装:make   install查看编译后的结果:cd   /usr/local/lib3.7 编译安装Hadoop-Snappy通过git clone下载源码:git   clone https://github.com/electrum/hadoop-snappy.git修改src/main/native/Makefile.am文件:vi   src/main/native/Makefile.am根据如果红框内的内容进行修改         执行mvn package进行编译:mvn   package         查看编译后的jar文件:cd   target/hadoop-snappy-0.0.1-SNAPSHOT-tar/hadoop-snappy-0.0.1-SNAPSHOT/lib【注】:hadoop-snappy-0.0.1-SNAPSHOT.jar文件在hadoop-2.6.0-cdh5.15.1编译完成后,需将该文件拷贝到$HADOOP_HOME/lib库目录下; 4 软件移植分析1、使用checkSo工具(获取地址:https://bbs.huaweicloud.com/forum/thread-22679-1-1.html)检查hadoop-2.6.0-cdh5.15.1对应x86的安装包或源码包是否有依赖x86的so文件,通过检查hadoop-2.6.0-cdh5.15.1的源码hadoop-2.6.0-cdh5.15.1-src.tar.gz没有发现有依赖的x86架构的so文件。  5 依赖库编译5.1 编译snappy-java-1.0.4.1.jarSnappy是Google开源的压缩/解压缩库,snappy-java封装了其接口1)从github网站下载源码并解压wget https://codeload.github.com/xerial/snappy-java/tar.gz/snappy-java-1.0.4.1mv snappy-java-1.0.4.1   snappy-java-1.0.4.1.tar.gztar -xzvf snappy-java-1.0.4.1.tar.gzcd snappy-java-snappy-java-1.0.4.1        2)修改Makefile文件中snappy源码的下载路径:vi Makefile【注】因为默认的路径已经失效,需要如下使用新的下载路径:http://repository.timesys.com/buildsources/s/snappy/snappy-1.0.4/snappy-1.0.4.tar.gz3)安装libstdc++-static-4.8.5-28.el7.ns7.02.aarch64.rpm和glibc-static-2.17-222.el7.ns7.01.aarch64.rpmwget http://download.cs2c.com.cn/neokylin/desktop/everything/7.0/aarch64/os/Packages/libstdc++-static-4.8.5-28.el7.ns7.02.aarch64.rpmrpm -ivh   libstdc++-static-4.8.5-28.el7.ns7.02.aarch64.rpmwget http://download.cs2c.com.cn/neokylin/desktop/everything/7.0/aarch64/os/Packages/glibc-static-2.17-222.el7.ns7.01.aarch64.rpmrpm -ivh   glibc-static-2.17-222.el7.ns7.01.aarch64.rpm4)执行make编译并查看编译后的snappy-java-1.0.4.1.jarmakecd   target/5)将编译后的snappy-java-1.0.4.1.jar覆盖到本地maven仓对应路径cp   snappy-java-1.0.4.1.jar   /root/.m2/repository/org/xerial/snappy/snappy-java/1.0.4.1/5.2 编译leveldbjni-all-1.8.jarLeveldb是一个google实现的非常高效的kv数据库;官方链接:https://github.com/google/leveldb依据网上资料,编译leveldbjni-all-1.8.jar,需要先将leveldb和snappy编译成静态库,再将两个静态库编译进leveldbjni.so里面,最后生成leveldbjni-all-1.8.jar压缩包。注:如下编译snappy-1.1.3、leveldb-1.20和leveldbjni需要在同一个ssh窗口执行,切换ssh会导致如下临时定义的SNAPPY_HOME和LEVELDB_HOME变量失效,如发生ssh窗口异常,编译leveldbjni时需要先定义临时SNAPPY_HOME和LEVELDB_HOME变量(变量路径要正确);5.2.1 编译snappy-1.1.3wget https://github.com/google/snappy/archive/1.1.3.tar.gztar   -zxvf 1.1.3.tar.gzcd   snappy-1.1.3/./autogen.sh./configure   --with-picmake   -j20export   SNAPPY_HOME=`pwd`cp   .libs/libsnappy.a .5.2.2 编译leveldb-1.201)源码下载并解压wget https://github.com/google/leveldb/archive/v1.20.tar.gztar   -zxvf v1.20.tar.gzcd   leveldb-1.20        2)修改build_detect_platformvi   build_detect_platform 注释如下红框内的3行注释内容,并添加如下三行:echo   "PLATFORM_CCFLAGS=$PLATFORM_CCFLAGS $PLATFORM_SHARED_CFLAGS"   >> $OUTPUTecho   "PLATFORM_CXXFLAGS=$PLATFORM_CXXFLAGS $PLATFORM_SHARED_CFLAGS"   >> $OUTPUTecho   "PLATFORM_SHARED_CFLAGS=" >> $OUTPUT3)修改Makefile,增加-fPIC的编译选项vi   Makefile增加-fPIC4)对比附件补丁leveldbpatch.zip,将代码合入(替换源码压缩包对应路径中的文件即可):5)执行编译make   -j20export   LEVELDB_HOME=`pwd`cp   out-static/libleveldb.a . 5.2.3 编译leveldbjni1)通过git获取源码git   clone https://github.com/fusesource/leveldbjni.gitcd   leveldbjniexport   LEVELDBJNI_HOME=`pwd`        2)修改pom.xmlvi   pom.xml 注释如下红框内注释内容,并增加如下两行    <module>leveldbjni-linux64</module>      <module>leveldbjni-all</module>3)修改leveldbjni-all/pom.xml文件vi   leveldbjni-all/pom.xml 注释如下红框内注释内容,并按红框内框内容进行修改4)修改所有pom.xml文件中的版本号将所有pom.xml文件中的版本“99-master-SNAPSHOT”改为“1.8”:sed -i   's/99-master-SNAPSHOT/1.8/g' `find . -name pom.xml`5)编译选项增加 -fsigned-charvim leveldbjni/src/main/native-package/Makefile.in增加-fsigned-char6)修改automake版本号vi   leveldbjni/src/main/native-package/aclocal.m4vi   leveldbjni/src/main/native-package/configure把automake版本号从1.14改成1.13,注意不要改成1.13.4(根据系统安装automake版本号进行修改)7)执行maven编译并查看编译结果export   LIBRARY_PATH=${SNAPPY_HOME};export C_INCLUDE_PATH=${LIBRARY_PATH};export   CPLUS_INCLUDE_PATH=${LIBRARY_PATH}mvn   clean package -P download -P linux64-aarch64 –DskipTestscd   leveldbjni-all/target/注:执行maven编译会自动编译五个模块:leveldbjni-project、leveldbjni、leveldbjni-linux64、leveldbjni-linux64-aarch64、leveldbjni-all;8)将编译后的leveldbjni-all-1.8.jar复制到本地maven仓对应路径进行覆盖cp   leveldbjni-all-1.8.jar   /root/.m2/repository/org/fusesource/leveldbjni/leveldbjni-all/1.8/5.3 编译jline-2.11.jar编译依赖关系:jline-2.11 / jline-2.12 à jansi-1.11 à jansi-native-1.5先编译jansi-native-1.5和jansi1.11(编译命令使用mvn package -Dmaven.javadoc.skip=true),编译生成的jansi-1.11.jar拷贝到maven本地仓库 1)下载jansi-native-1.5源码,并解压wget https://github.com/fusesource/jansi-native/archive/jansi-native-1.5.tar.gztar   -zxvf jansi-native-1.5.tar.gzcd   jansi-native-jansi-native-1.5/        2)编译jansi-native-1.5并查看编译结果mvn   package -Dmaven.javadoc.skip=truecd   target/3)将编译后的jansi-native-1.5.jar和jansi-native-1.5-linux64.jar拷贝到本地maven仓对应路径cp   jansi-native-1.5.jar   /root/.m2/repository/org/fusesource/jansi/jansi-native/1.5/cp   jansi-native-1.5-linux64.jar   /root/.m2/repository/org/fusesource/jansi/jansi-native/1.5/4)将编译后的libjansi.so拷贝到maven安装包解压对应路径mkdir -p   /home/zdk/others/apache-maven-3.5.4/lib/jansi-native/aarch64-Linuxcp ./native-build/target/lib/libjansi.so   /home/zdk/others/apache-maven-3.5.4/lib/jansi-native/aarch64-Linux/cd /home/zdk/others/apache-maven-3.5.4/lib/jansi-native/aarch64-Linux/5)下载jansi-1.11源码并解压wget   https://github.com/fusesource/jansi/archive/jansi-project-1.11.tar.gztar   zxvf jansi-project-1.11.tar.gz6)进入jansi-1.11解压目录cd   jansi-jansi-project-1.11/jansi/        7)修改pom.xmlvi pom.xml 注释如下红框内容8)使用maven编译并查看编译结果mvn   clean package -Dmaven.javadoc.skip=truecd   target/9)将编译后的jansi-1.11.jar拷贝到本地maven仓对应路径cp   jansi-1.11.jar /root/.m2/repository/org/fusesource/jansi/jansi/1.11/10)下载jline-2.11源码,并解压wget   https://github.com/jline/jline2/archive/jline-2.11.tar.gztar   zxvf jline-2.11.tar.gzcd   jline2-jline-2.11/        11)执行maven编译并查看编译结果mvn   packagecd   target/12)将编译后的jline-2.11.jar拷贝到本地maven仓对应路径cp   jline-2.11.jar /root/.m2/repository/jline/jline/2.11/ 6 Hadoop-2.6.0-CDH5.15.1编译6.1 下载源码下载代码并解压:wget http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.15.1-src.tar.gztar -zxvf hadoop-2.6.0-cdh5.15.1-src.tar.gz6.2 打patch补丁进入hadoop源码解压目录:cd hadoop-2.6.0-cdh5.15.1/在解压路径执行如下命令打如下附件patch补丁:export   MAVEN_OPTS="-Xms1024m -Xmx10G -XX:PermSize=4096m"yum install patchpatch -p0 <   HADOOP-11484.001.patch注:附件patch补丁名为HADOOP-11484.001.patch.rar6.3 执行编译执行编译并查看编译后的结果:mvn clean package -DskipTests   -Pdist,native -Dtar -Dsnappy.lib=/home/hadoop-snappy-master/target/hadoop-snappy-0.0.1-SNAPSHOT-tar/hadoop-snappy-0.0.1-SNAPSHOT/lib/native/Linux-aarch64-64/   -Dbundle.snappycd hadoop-dist/target/注:标红部分为3.7章节编译安装hadoop-snappy后产生的目录6.4 注意点    1)编译过程中遇到问题可以参考9 FAQ    2)第一次编译的时候会从远程maven仓库下载jar包到本地仓库,但是有几个jar包是X86的,所以在hadoop编译完成及第5章的jar包编译完成后,需要将第5章编译的jar包替换掉本地仓库中相应路径的jar包,然后重新编译一次hadoop。第二次编译会很快,所以不用担心。 7 验证1、编译验证使用checkSo工具(获取地址:https://bbs.huaweicloud.com/forum/thread-22679-1-1.html)检查编译后的hadoop-dist/target/hadoop-2.6.0-cdh5.15.1.tar.gz中是否不再含有依赖的x86架构的so文件,检查方法参考工具中的 《CheckSo使用说明.docx》,如果还有依赖的x86架构的so文件,则需要继续完成对应jar包的编译,直到无依赖的x86架构的so文件后,再次编译该组件并通过checkSo工具检查确认,编译后的组件包不再有依赖的x86架构的so文件则表明编译成功。通过checkSo工具检查hadoop-dist/target/路径下编译后的hadoop-2.6.0-cdh5.15.1.tar.gz发现存在如下依赖的so文件:上图依赖库的编译见 5 依赖库编译 章节(需要编译jline-2.11.jar、leveldbjni-all-1.8.jar、snappy-java-1.0.4.1.jar),完成依赖库编译后需要重新编译前面编译包含依赖依赖库的hadoop-2.6.0-cdh5.15.1.tar.gz,直到编译后的hadoop-2.6.0-cdh5.15.1.tar.gz通过checkSo工具检查不再有依赖so等文件;2、功能验证暂无。 8 参考信息http://archive.cloudera.com/cdh5/cdh/5/hadoop/http://hadoop.apache.org/ 9 FAQ9.1 git clone报证书错误9.1.1 问题现象9.1.2 解决方法git config --global http."sslVerify" false9.2 wget下载https链接报证书错误9.2.1 问题现象9.2.2 解决方法在下载命令后面跟参数--no-check-certificate9.3 hadoop编译过程下载apache-tomcat-6.0.44.tar.gz失败9.3.1 问题现象9.3.2 解决方法在服务器下载apache-tomcat-6.0.44.tar.gz失败,报这个错误时手动下载“http://archive.cloudera.com/tarballs/apache-tomcat-6.0.53.tar.gz”并上传到“hadoop-2.6.0-cdh5.15.1/hadoop-hdfs-project/hadoop-hdfs-httpfs/downloads”路径下。9.4 编译leveldbjni报automake命令找不到9.4.1 问题现象9.4.2 解决方法没有安装automake-1.14,可以使用yum install automake安装。如果yum源上找的没有1.14的版本,则需要修改leveldbjni-linux64/target/native-build下的配置文件。修改leveldbjni/src/main/native-package/configure和leveldbjni/src/main/native-package/aclocal.m4,将里面的1.14改成服务器上安装的automake版本,比如1.13。9.5 编译leveldbjni时error: required file 'autotools/compile' not found9.5.1 问题现象9.5.2 解决方法根据问题信息,需要手动进入相应目录,手动执行相应命令安装。cd leveldbjni-linux64/target/native-buildautomake   --add-missing 【来自转载】
  • [技术干货] [大数据-java]CDH5.15.1(x86)--Tez相关组件移植指南-【中标麒麟7.5】
    1 CDH简介CDH(Cloudera’s Distribution Including Apache Hadoop)是Cloudera的开源大数据平台,基于Web的用户界面,支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、Hbase、Zookeeper、Sqoop,简化了大数据平台的安装、使用难度。本文主要是描述如何将CDH 5.15.1的x86版本中的Tez相关组件移植到TaiShan服务器上,包含编译部分。CDH的其他组件如果需要移植,也可以参考本文中描述的方法操作。官方链接: https://tez.apache.org/类别:大数据语言: JAVA2 软硬件环境类别子项版本获取地址(方法) 硬件CPUKunpeng 920iBMC网络Ethernet-10GEiBMC存储SATA 4TiBMC内存xxG   xxxMHziBMCOSNeoKylin7.5cat   /etc/neokylin-releaseKernel4.14.0cat   /proc/version 软件GCC4.8.5gcc -vMaven3.5.4参考下面安装说明JDK1.8.0_191参考下面安装说明Protoc2.5.0参考下面安装说明3 编译环境准备3.1 安装Openjdk下载并安装到指定目录(如/opt/tools/installed):wget  https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u191-b12/OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gztar   -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gzmv jdk8u191-b12   /opt/tools/installed/【注】:使用系统自带Openjdk软件包可以通过执行“yum -y install java-1.8.0*”进行安装然后参考如下步骤配置JAVA_HOME环境变量;配置java环境变量,在/etc/profile文件末尾处增加下面的代码:JAVA_HOME=/opt/tools/installed/jdk8u191-b12PATH=$JAVA_HOME/bin:$PATHexport   JAVA_HOME PATH运行下面命令,使修改的环境变量生效:source   /etc/profile3.2 安装GCC等依赖项挂载OS镜像:mount -o loop   /home/NeoKylin/nsV7Update5-adv-lic-build05-aarch64.iso /mnt/NeoKylin/修改/etc/yum.repos.d/ns7-adv.repo文件,配置yum本地源:[ns7-adv-os]name=NeoKylin Linux Advanced Server 7 - Osbaseurl= file:///mnt/NeoKylingpgcheck=0gpgkey=file:///mnt/NeoKylin/RPM-GPG-KEY-neokylin-releaseenabled=1        运行下面的命令,使yum源配置生效:yum clean allyum makecacheyum安装GCC等相关依赖:sudo yum install -y snappy snappy-devel autoconf automake libtool   git gcc gcc-c++ make cmake openssl openssl-devel ncurses-devel zlib zlib-devel   bzip2 bzip2-devel bzip2-libs readline readline-devel bison zip unzip tar tcl java-1.8.0*   bison* ncurses*3.3 安装Maven下载并安装到指定目录(如/opt/tools/installed):wget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gztar -zxf apache-maven-3.5.4-bin.tar.gzmv apache-maven-3.5.4 /opt/tools/installed/修改maven环境变量,在/etc/profile文件末尾增加下面高亮代码:JAVA_HOME=/opt/tools/installed/jdk8u191-b12M2_HOME=/opt/tools/installed/apache-maven-3.5.4PATH=$M2_HOME/bin:$JAVA_HOME/bin:$PATHexport M2_HOME   JAVA_HOME PATH运行下面的命令,是修改的环境变量生效:source /etc/profile修改maven配置文件中的:本地仓路径、远程仓等:配置文件路径:/opt/tools/installed/apache-maven-3.5.4/conf/settings.xml本地仓库配置:(可选,可保持默认)<!--默认在“~/.m2/”目录下,可以按下行格式修改成你自己想保存的目录--><localRepository>/path/to/local/repo</localRepository>远程仓库配置:(可选,默认用maven2官方远程仓但访问慢,建议用国内maven仓)<!--修改成自己搭建的maven仓库,如果没有,可以使用下面的华为开源maven仓 --><mirror>  <id> huaweimaven</id>  <name> huaweicloud maven</name>  <url> https://mirrors.huaweicloud.com/repository/maven/</url>  <mirrorOf>central</mirrorOf>   </mirror>配置代理:(可选,外网环境下不用配置maven的代理)  <proxies>   <proxy>        <id>optional</id>        <active>true</active>        <protocol>http</protocol>      <username>用户名</username>      <password>密码</password>      <host>代理服务器网址</host>      <port>代理服务器端口</port>        <nonProxyHosts>local.net|some.host.com</nonProxyHosts>    </proxy>  </proxies>3.4 对gcc、g++和c++增加-fsigned-char选项1、对gcc增加-fsigned-char选项1)使用which gcc命令寻找gcc所在路径(一般位于/usr/bin/gcc)which gcc2)、更改gcc的名字(比如改成gcc-arm)mv /usr/bin/gcc   /usr/bin/gcc-arm3)、进入gcc所在目录执行vi gcc,并填入如下内容保存:#! /bin/sh /usr/bin/gcc-arm -fsigned-char "$@"cd /usr/bin/vi gcc4)、执行chmod +x gcc给脚本添加执行权限chmod +x gcc2、对g++增加-fsigned-char选项1)使用which g++命令寻找g++所在路径(一般位于/usr/bin/g++)which g++2)、更改g++的名字(比如改成g++-arm)mv /usr/bin/g++   /usr/bin/g++-arm3)、进入g++所在目录执行vi g++,并填入如下内容保存:#! /bin/sh /usr/bin/g++-arm -fsigned-char "$@"cd /usr/bin/vi g++4)、执行chmod +x g++给脚本添加执行权限chmod +x g++3、对c++增加-fsigned-char选项1)使用which c++命令寻找g++所在路径(一般位于/usr/bin/c++)which c++2)、更改c++的名字(比如改成c++-arm)mv /usr/bin/c++   /usr/bin/c++-arm3)、进入c++所在目录执行vi c++,并填入如下内容保存:#! /bin/sh /usr/bin/c++-arm -fsigned-char "$@"cd /usr/bin/vi c++4)、执行chmod +x c++给脚本添加执行权限chmod +x c++3.5 安装Protoc下载并解压源码:wget   https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gztar   -zxf protobuf-2.5.0.tar.gzcd   protobuf-2.5.0修改autogen.sh文件的第20-24行:vi   autogen.sh注释如下红框内注释内容并增加如下:curl -L   https://github.com/google/googletest/archive/release-1.5.0.tar.gz | tar zxmv googletest-release-1.5.0 gtest打ARM补丁:cp   protoc.patch ./src/google/protobuf/stubs/cd   ./src/google/protobuf/stubs/patch   -p1 < protoc.patchcd   -注:proctoc ARM补丁为protoc.patch.rar(从附件中解压获取);        编译并安装到系统默认目录:./autogen.sh   && ./configure CFLAGS='-fsigned-char' && make && make   install3.6 编译安装Snappy 1.1.3下载并解压源码:wget   https://github.com/google/snappy/releases/download/1.1.3/snappy-1.1.3.tar.gztar   zxvf snappy-1.1.3.tar.gzcd   snappy-1.1.3/执行./configure进行编译配置:./configure        执行make进行编译:make   -j32        执行make install编译安装:make   install查看编译后的结果:cd   /usr/local/lib3.7 编译安装Hadoop-Snappy通过git clone下载源码:git   clone https://github.com/electrum/hadoop-snappy.git修改src/main/native/Makefile.am文件:vi   src/main/native/Makefile.am根据如果红框内的内容进行修改         执行mvn package进行编译:mvn   package         查看编译后的jar文件:cd   target/hadoop-snappy-0.0.1-SNAPSHOT-tar/hadoop-snappy-0.0.1-SNAPSHOT/lib【注】:hadoop-snappy-0.0.1-SNAPSHOT.jar文件在hadoop-2.6.0-cdh5.15.1编译完成后,需将该文件拷贝到$HADOOP_HOME/lib库目录下; 4 软件移植分析1、使用checkSo工具(获取地址:https://bbs.huaweicloud.com/forum/thread-22679-1-1.html)检查tez-0.5.4对应x86的安装包或源码包是否有依赖x86的so文件,通过检查tez-0.5.4的源码apache-tez-0.5.4-src.tar.gz没有发现有依赖的x86架构的so文件。 5 依赖库编译5.1 编译snappy-java-1.0.4.1.jarSnappy是Google开源的压缩/解压缩库,snappy-java封装了其接口1)从github网站下载源码并解压wget https://codeload.github.com/xerial/snappy-java/tar.gz/snappy-java-1.0.4.1mv snappy-java-1.0.4.1   snappy-java-1.0.4.1.tar.gztar -xzvf snappy-java-1.0.4.1.tar.gzcd snappy-java-snappy-java-1.0.4.1        2)修改Makefile文件中snappy源码的下载路径:vi Makefile【注】因为默认的路径已经失效,需要如下使用新的下载路径:http://repository.timesys.com/buildsources/s/snappy/snappy-1.0.4/snappy-1.0.4.tar.gz3)安装libstdc++-static-4.8.5-28.el7.ns7.02.aarch64.rpm和glibc-static-2.17-222.el7.ns7.01.aarch64.rpmwget http://download.cs2c.com.cn/neokylin/desktop/everything/7.0/aarch64/os/Packages/libstdc++-static-4.8.5-28.el7.ns7.02.aarch64.rpmrpm -ivh   libstdc++-static-4.8.5-28.el7.ns7.02.aarch64.rpmwget http://download.cs2c.com.cn/neokylin/desktop/everything/7.0/aarch64/os/Packages/glibc-static-2.17-222.el7.ns7.01.aarch64.rpmrpm -ivh   glibc-static-2.17-222.el7.ns7.01.aarch64.rpm4)执行make编译并查看编译后的snappy-java-1.0.4.1.jarmakecd   target/5)将编译后的snappy-java-1.0.4.1.jar覆盖到本地maven仓对应路径cp   snappy-java-1.0.4.1.jar   /root/.m2/repository/org/xerial/snappy/snappy-java/1.0.4.1/ 6 Tez-0.5.4编译6.1 下载源码下载代码并解压:wget   https://mirrors.tuna.tsinghua.edu.cn/apache/tez/0.5.4/apache-tez-0.5.4-src.tar.gztar -zxvf apache-tez-0.5.4-src.tar.gzcd   apache-tez-0.5.4-src/ 6.2 执行编译执行编译并查看编译后的结果(每次编译前需要指定内存大小):export MAVEN_OPTS="-Xms1024m -Xmx12G   -XX:PermSize=4096m"mvn clean install -Phadoop-2 -DskipTests -Pdist   -Prelease,security,native,hadoop-snappy -Drat.numUnapprovedLicenses=200   -Dhadoop.profile=2.0 -Dhadoop-snappy.version=0.0.1-SNAPSHOTcd tez-dist/target/6.3 注意点编译过程中遇到问题可以参考9 FAQ第一次编译的时候会从远程maven仓库下载jar包到本地仓库,但是有几个jar包是X86的,所以在tez编译完成及第5章的jar包编译完成后,需要将第5章编译的jar包替换掉本地仓库中相应路径的jar包,然后重新编译一次tez。第二次编译会很快,所以不用担心。 7 验证1、编译验证使用checkSo工具(获取地址:https://bbs.huaweicloud.com/forum/thread-22679-1-1.html)检查编译后的tez-dist/target/tez-0.5.4.tar.gz中是否不再含有依赖的x86架构的so文件,检查方法参考工具中的 《CheckSo使用说明.docx》,如果还有依赖的x86架构的so文件,则需要继续完成对应jar包的编译,直到无依赖的x86架构的so文件后,再次编译该组件并通过checkSo工具检查确认,编译后的组件包不再有依赖的x86架构的so文件则表明编译成功。通过checkSo工具检查tez-dist/target/路径下编译后的tez-0.5.4.tar.gz发现存在如下依赖的so文件:上图依赖库的编译见 5 依赖库编译 章节(需要编译snappy-java-1.0.4.1.jar),完成依赖库编译后需要重新编译前面编译包含依赖库的tez-0.5.4.tar.gz,直到编译后的tez-0.5.4.tar.gz通过checkSo工具检查不再有依赖so等文件;2、功能验证暂无。 8 参考信息http://tez.apache.org/releases/apache-tez-0-5-4.htmlhttp://tez.apache.org/9 FAQ9.1 git clone报证书错误9.1.1 问题现象9.1.2 解决方法git config --global http."sslVerify" false9.2 wget下载https链接报证书错误9.2.1 问题现象9.2.2 解决方法在下载命令后面跟参数--no-check-certificate【来自转载】 
  • [热门活动] 大数据云计算
    未来是大数据和云计算的时代吗?有哪些发展方向?
  • [华为动态] 农村宅基地信息化怎么做?看华为与神舟信息!
    时间,见证我们的奋斗;生态,汇聚智慧与力量。在这个特殊的春天里,华为特别推出了#Σco时间#系列栏目,以线上直播+互动的形式,共话技术变革与行业转型,推动数字经济发展!3月13日,在华为与神州信息共同举办的“农村宅基地信息化研讨会”活动中,北京林业大学副教授、绿色发展与中国农村土地问题研究中心主任、自然资源部自然资源登记专家组成员巩前文,神州信息农业板块副总经理马长志,以及华为公司数字政府副总裁王鹤军等行业专家一同探讨如何利用数字化的手段推动宅基地的信息化建设,使其成为农村经济增长的新引擎;同时分享了在这一进程中,华为与神州信息又是如何优势互补,以云计算、区块链、大数据、人工智能、5G、物联网等新技术为驱动,将神州信息深耕农业信息化20年所积累的农业场景深刻理解能力、业界领先的解决方案能力与数据优势,以及华为基于鲲鹏架构的信创产品相融合,共推农业农村数字化,来加速乡村实现智慧转型的。宅基地的信息化通路作为保障农民安居乐业和农村社会稳定的重要基础,宅基地的有效管理一直被国家视为重中之重,不仅要盘活闲置宅基地和闲置住宅,依法保护农民合法权益,更要鼓励节约集约利用宅基地,杜绝超标准占用宅基地、违法违规买卖宅基地、侵占耕地建设住宅等问题。从长期来看,城镇化建设的步伐将持续加快,为此,首先要明确的就是百姓进城过程中的权益归属要有清晰的认定,即:承包地、宅基地、家农房,以及经济合作社的股权。“宅基地管理重点仍然是权属管理,先摸清楚底,固化权属,有些纠纷问题,能够解决的解决,不能解决的把它搁置起来。”神州信息农业板块副总经理马长志谈到,“宅基地入市只是时间早晚问题,我们要在入市之前帮助政府把权属搞清楚,在人口流动过程中保障老百姓的权益不受侵害。”因为标准化的数据,让相关机构在开展服务实践中更加有据可循,使得大数据平台成为了乡村智慧化的关键技术手段,而打通各机构组织和职能部门的数据体系,并为之制定一套行之有效的管理政策至关重要。例如,尽管宅基地的划分从自然资源部门调整到了农业农村部,但管理过程中仍会涉及到增补测的变更,又依此会延伸出房屋、土地测量、结果公示、登记办证等问题,包括农房宅基地全流程的管理和作业问题。目前,农业农村部主要负责管理工作,自然资源部则负责收集基础数据,各司其职的背后体现了专人专事,而对精细化的管理也提出了高质量的要求。举例来说,除了要对宅基地和农村农房的使用状况了然于胸,还要对宅基地的管理体系,以及所服务对象的感受深入摸底,即让农民农户也参与到决策的前端。对于宅基地的管理,神州信息农业板块副总经理马长志谈到:对于农业农村部门,它是从无到有的过程,需要配备人员、场地、设备,还要配套相应的管理制度与流程,还要增加宅基地窗口服务。这样宅基地的管理它会成为农业农村部门一项日常性工作。从大的流程来看,农业农村部门要实现跟国土部门数据对接,要质检检测,数据产生变更,还要做一些增补策,也要建立全过程管理平台进行管理。这对农业农村部门来说,不仅是一项从无到有的工作,而且它包含了整个农房宅基地全流程、全过程的管理。“构建宅基地的大数据能够极大推动整个农业农村数字化的发展。”华为公司数字政府副总裁王鹤军表示,“数字农业农村最核心的就是数据,土地和人的数字化是重要基础,建设宅基地大数据可以保护宅基地使用权人的合法权利,也可以使政府对于农村宅基地能够有效管理,构建宅基地大数据是农村集体土地使用制度改革和不动产统一登记重要的基础和保障,可以有效规范农村住宅建设,防止乱占、乱用宅基地,维护社会和谐。”加速乡村转型的技术创新在宅基地管理前置的统计标准统一问题上,马长志谈到农房和宅基地管理指标很重要,我们根据指标分解出数据项,这样大家在作业的时候可以让各地很清晰的知道工作重点在哪里,目标在哪里,做到什么样才是合格的。而且这个标准有助于指导信息化平台的建设,信息化平台把管理的流程、管理的指标和数据项固化在平台里,平台会对数据包括工作质量进行校验,以信息化平台作为抓手,做出来的工作才能符合国家标准。神州信息过去20年积极推进农业农村信息化,打造国家级平台12个,省级平台30个,农业信息化项目5000余个,覆盖31个省市自治区、2000余县、70万用户群体。目前,神州信息作为金融科技全产业链综合服务商,正以“农业+科技+金融”三方赋能、共推资本下乡的新模式,全面助推农村智慧管理及数字农业发展。在数据标准化层面,华为总结出了一套标准化、可复制的解决方案,包括数据治理中的接口标准、规格标准、业务语义标准等等,可以为宅基地数据共享交换提供保障。同时,华为还将相关的技术、算法、流程、业务规则进行分装,预装在华为数据标准化治理中,有效提升了宅基地数据标准化实施效率和质量。“这些产品和经验已经在社会公共服务,在制造业、金融、教育、医疗等领域得到了大规模应用,但是在农业尤其是宅基地领域应用还不多,我们需要与神州信息这样懂农业农村数字化的合作伙伴一起合作,探索宅基地数据统计标准化的问题。我相信华为和神州信息强强联合,将使得农业农村数据利用更加高效。”王鹤军说。为了推动宅基地信息化建设,华为打造了基于鲲鹏架构的信创数字平台,并且结合大数据、区块链、5G、云计算等技术使得宅基地的管理更加智能化。例如在使用无人机进行宅基地数据采集时,借助5G网络可以将4K乃至更高清晰度的图像视频实时回传,大幅提升业务开展的效率和体验。区块链技术可以保证宅基地数据真实有效,安全可追溯,而通过接入华为WeLink平台,能够使各业务主管部门在云平台上统一进行业务管理,链接原先各个信息互通较为缓慢的节点,在统一的数据底座基础上,实现管理信息的上报,决策的过程中信息数字化,打通信息断点。王鹤军表示:“现在应该有序开展宅基地大数据建设工作,不仅是宅基地信息数据库,还可以进一步把人口、土地确权、农业农村集体资产、养殖、销售这些数据统筹起来,建立农业农村大数据资源池,实现共享交换,构建农业农村数字信用体系,才能发挥大数据更大的价值。同时,也要注意宅基地数据安全的重要性,真正推动农业农村的数字化发展。”结语千行百业的信息化建设是推动全产业链数字化转型的重要抓手,而宅基地信息化的背后是人口迁移、社会演进、资源再分配等问题的延伸,这就离不开对数据价值的充分挖掘。围绕这一核心理念,从前期业务数据对接、宅基地数据库建立、对接数据检测与增补、完善,由第三方服务的数据分项变更、宅基地整体管理平台建立等涵盖农村宅基地改革的全流程的应用模式,加之与云计算、5G等技术创新的融合,农村宅基地管理的标准化、流程化、统一化、动态化、协同化和精细化管理,将在华为与神州信息的携手探索下加速到来。
  • [分享交流] 【HDC.FusionData】大数据开发的至简之道 – FusionData河图引擎
    这是个“数据爆炸”的时代,各行各业都在进行数字化转型,数据量从以前的TB级,轻松到目前的PB级,数据种类更加多样化,结构化数据(关系数据库行和列),半结构化数据(CSV、XML、JSON的日志),非结构化数据(电子邮件,文档,PDF)和二进制数据(图像、音频、视频)。如何高效存储、管理这些数据,快速释放数据价值,是每个企业都在思考和期望解决的问题。企业对于数据的需求,催生了大数据技术的发展,当前大数据已经形成非常丰富的生态,正如以下这张经典的大数据技术全貌图:图1. 大数据全貌图面对如此丰富的组件库,工程师们能够犹如搭建乐高积木一般地构建一套大数据解决方案。然而随着业务的推进,这种“乐高式”的大数据解决方案的弊端逐渐暴露:l  选型难 – 组件多且开发方式和语言有差异,如何做好兼容,又如何不被绑死在一个组件是个困难点。l  数据孤岛 – 组件之间互通不佳,陷入“找数据难,取数据难,数据搬移,数据膨胀”的陷阱。l  开发门槛高 – 组件的开发语言不同,北向接口不一致,大大增加了开发人员的开发成本和技术门槛。图2. 积木式大数据框架的弊端 是时候重新审视这种“乐高式”方案了华为公司在2019年发布了智能数据湖解决方案FusionData,重新定义了数据湖基础设施,该方案具备3个特征:l  支持海量多样性数据低成本存储,灵活扩展;l  支持多源数据实时融合分析,消除数据孤岛;l  支持多样性数据按需接入,并且数据经过分析处理后可共享给各应用系统,实现数据价值释放。图3. FusionData解决方案总体架构在FusionData方案中,华为公司首创的大数据库引擎 - 河图引擎 (HetuEngine),为大数据开发人员提供了一种至简至易的开发方式。河图引擎吸收了华为在大数据深耕多年的经验,站在Presto 和Impala 两大巨人的肩膀上,集大家之长,创新地提出了“四个一”理念:“一个入口、一个目录、一份数据、统一安全”。图4. 河图引擎的“四个一”1.     一个入口: 提供兼容ISO/ ANSI SQL:2003 标准的SQL语法,统一的JDBC, ODBC 以及REST 北向接口,解决开发人员取数据难的问题。2.     一个目录: 构建南向异构异地数据源的全局数据视图,让开发人员能够一眼看到全局数据,解决找数据的难的问题。3.     一份数据:通过开放数据连接框架,统一接入南向数据源,解决用数难问题。4.     统一安全:让数据的访问控制更加集中,更加细粒度。权限分配也更加便捷高效。 对于开发人员来说,一个入口保证了开发的极简体验。通过标准SQL语法,屏蔽了底层数据源的差异,减少了开发人员的学习成本,以及在多种语言规范和编程方式之间的切换的代价。更重要的是,一个统一的入口,使得跨大数据引擎协同计算和分析变得更加高效。 一条SQL 语句可以同时计算HDFS、MPPDB、RDBMS的数据,并且具备跨中心/跨域/跨云异构协同计算能力,可以实现真正的数据的0搬迁。此外,对已有的技术和资产投资破坏性小,这对开发人来说也是非常经济的,。 案例分析接下来,我们模拟一个批流融合查询的场景。场景简化为,假设某政务系统需要实时处理公司提交各项申请,在处理申请之前必须进行信息核查以及征信筛查。公司用户提交的申请信息通过Kafka消息队列发送到系统,而公司信息表和公司的历史征信记录表都存放在Hive数仓中。       实时提取核查后的数据是这个问题的重点,一个通常的步骤包括:第一步,开发人员需要首先写代码从Kafka中获取消息;第二步,解析消息并提取出申请号和用户ID,并将提取的数据缓存下来;第三步,将Kafka的临时数据导入Hive;第四步,借助Hive 引擎进行多表的联合查询得出筛查结果。       河图引擎可以直接访问异构数据,且对于Kafka这样的流式消息也能够直接映射为一张数据表。因此在河图引擎中以上完全可以用一个标准的SQL 语句来实现以上功能:           图5. 示例SQL图6. SQL查询结果与传统批流处理相比,河图的优势在于:1.     一边流一边读,结合历史数据快速分析;2.     无感知底层数据引擎;3.     统一语言访问,兼容SQL:2003;4.     无需额外的学习成本; 不仅如此,通过实际测试我们发现,性能的大幅提升约10倍,而代码量却显著下降了约80%。 这对于开发者而言是十分友好的。图7. 开发效率提升华为公司计划于2020年6月30日发布开源版本的河图引擎。目前华为正不断扩展河图引擎的北向和南向接口,支持更多应用和更多异构数据源,解决用数难问题,确保上层的数据治理和数据应用软件可以更好地对接数据基础设施。 河图引擎致力于构建“大数据库”,为开发者提供极致的开发效率,让开发者像使用数据库一样的使用大数据,聚焦业务,挖掘数据价值。古有云:“大禹得河图后始见清明”。