標籤(空格分隔): 大數據運維專欄html
- 一:關於zeppelin介紹
- 二:如何自定義CDH 的 parcels 與 csd 的jar 包
- 三:zeppelin 與CDH的集成
- 四:關於zeppelin 的測試
Apache Zeppelin 是一個讓交互式數據分析變得可行的基於網頁的開源框架。Zeppelin提供了數據分析、數據可視化等功能。 Zeppelin 是一個提供交互數據分析且基於Web的筆記本。方便你作出可數據驅動的、可交互且可協做的精美文檔,而且支持多種語言,包括 Scala(使用 Apache Spark)、Python(Apache Spark)、SparkSQL、 Hive、 Markdown、Shell等等。 Zeppelin 功能: 數據提取 數據發掘 數據分析 數據可視化展現以及合做
建議使用國外雲主機 ,flyfish 這邊用的是香港的雲主機 系統: ubuntu 16.0.4x64 jdk: jdk1.8.0_261 maven: apache-maven-3.6.3 jdk 與maven 安裝目錄:/software 環境變量配置: vim /etc/profile ---- # jdk export JAVA_HOME=/software/jdk1.8.0_261 export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar PATH=$PATH:$HOME/bin:$JAVA_HOME/bin # maven export MAVEN_HOME=/software/apache-maven-3.6.3 PATH=$PATH:$HOME/bin:$MAVEN_HOME/bin ---- java -version maven -version
編譯步驟以下: 1. 下載Livy和Zeppelin源碼並編譯 2. 生成Livy和Zeppelin的Parcel包 3. 下載編譯Cloudera提供的cm_ext工具,用於校驗parcel及生成manifest.json文件 4. 生成Livy和Zeppelin的csd文件,用於CM對Livy和Zeppelin服務的識別
下載 打包 源 cd /software git clone https://github.com/alexjbush/livy_zeppelin_cdh_csd_parcels.git flyfish 這裏已經下載好了
而後修改打包源的build.sh cd /software/livy_zeppelin_cdh_csd_parcels vim build.sh --- 主要修改的是上面 包的路徑: CM_EXT_BRANCH=cm5-5.15.0 LIVY_URL=http://apache.mirror.anlx.net/incubator/livy/0.7.0-incubating/apache-livy-0.7.0-incubating-bin.zip LIVY_MD5="2c5b63757414af16da308e63749e1ae6" LIVY_VERSION=0.7.0 ZEPPELIN_URL=http://apache.mirror.anlx.net/zeppelin/zeppelin-0.8.2/zeppelin-0.8.2-bin-all.tgz ZEPPELIN_MD5="e9d2cd60f6900eb6435b780a1292106e" ZEPPELIN_VERSION=0.8.2 --- 切記 由於包 的 版本 不一樣 md5 碼 也不一樣
執行編譯 生成parcels 包 chmod +x build.sh ./build.sh parcel
打出parcels 放在:ZEPPELIN-0.8.2_build 下面 cd ZEPPELIN-0.8.2_build manifest.json ZEPPELIN-0.8.2-el7.parcel 文件 LIVY 放在: cd LIVY-0.7.0_build LIVY-0.7.0-el7.parcel manifest.json
生成 csd 的jar 包 cd /software/livy_zeppelin_cdh_csd_parcels ./build.sh csd
生成 jar 包 ls -ld *.jar
mkdir zepplin-parcels mv ZEPPELIN.jar zeppelin-parcels mv ZEPPELIN-0.8.2_build/* zeppelin-parcels mv LIVY-0.7.0.jar livy-parcels/ cd LIVY-0.7.0_build/ mv * ../livy-parcels/ tar -zcvf zeppelin-parcels.tar.gz zeppelin-parcels tar -zcvf livy-parcels.tar.gz livy-parcels 而後把 zeppelin-parcels.tar.gz livy-parcels.tar.gz 這兩個包 下載下來 拿去 和 CDH 集成
cd /var/www/html/ mkdir livy zeppelin 上傳zeppelin-parcels.tar.gz 這個包 到 /var/www/html/zeppelin 下面 上傳livy-parcels.tar.gz 這個包到 /var/www/html/livy 下面 解壓 zeppelin-parcels.tar.gz 而後 將 manifest.json ZEPPELIN-0.8.2-el7.parcel ZEPPELIN-0.8.2.jar 這三個文件 移動 到 /var/www/html/zeppelin 下面 一樣將 livy-parcels.tar.gz 這個包 解壓 將 LIVY-0.7.0-el7.parcel LIVY-0.7.0.jar manifest.json 這三個文件 移動到 /var/www/html/livy 下面
cd /var/www/html/livy mv LIVY-0.7.0.jar /opt/cloudera/csd/ cd /var/www/html/zeppelin mv mv ZEPPELIN-0.8.2.jar /opt/cloudera/csd/ chown cloudera-scm:cloudera-scm /opt/cloudera/csd -R service cloudera-scm-server restart
去CDH 上面 配置 parcels 目錄 http://192.168.11.37/livy http://192.168.11.37/zeppelin
下載 ---》 分配---》 激活
重新啓動CM 加載擴展 jar 包
添加livy 與zeppelin 服務
添加livy 服務依賴
遇到問題: Error found before invoking supervisord: 'getpwnam(): name not found: livy'
解決辦法: 解決辦法: 在Livy REST Server所在服務器上增長livy用戶及用戶組 groupadd livy useradd livy -g livy chown livy:livy /var/log/livy 在HDFS的core-site.xml 中添加一下配置: <property> <name>hadoop.proxyuser.livy.groups</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.livy.hosts</name> <value>*</value> </property>
添加完以後重新啓動HDFS
添加zeppelin 服務 在主機 節點 上建立 zepplin 的用戶和組 在 Zeppelin Server 服務所在的節點添加 zeppelin 用戶和角色: groupadd zeppelin useradd zeppelin -g zeppelin mkdir -p /var/log/zeppelin chown zeppelin:zeppelin /var/log/zeppelin
報錯: 因爲錯誤 java.lang.IllegalArgumentException: The variable [${zeppelin_java_options}] does not have a corresponding value.,角色啓動失敗。 解決: ZEPPELIN --> 配置 --> 搜索 zeppelin_java_options --> 添加參數 -Xms1024m --> 重啓ZEPPELIN 服務
報錯: mkdir: `file:///var/local/zeppelin/conf': Input/output error 解決辦法: ZEPPELIN --> 配置 --> 搜索 dir --> 修改配置 --> 重啓ZEPPELIN 服務 hdfs dfs -mkdir -p /var/local/zeppelin/conf hdfs dfs -mkdir -p /var/local/zeppelin/data/notebook hdfs dfs -chmod 777 /var/local/zeppelin/conf hdfs dfs -chmod 777 /var/local/zeppelin/data/notebook
由於flyfish這邊的 8080 端口 被佔用了,改一下 zeppelin的端口 爲 8081 而後 改一下 zeppelin的 服務端 地址,而後重新啓動zeppelin 服務
打開web: http://192.168.11.37:8081
測試實例一: 上傳測試數據 vim test.txt --- hadoop hive spark zeppelin hadoop spark --- hdfs dfs -put test.txt /tmp
運行spark 測試程序 %spark val textFile = spark.read.textFile("/tmp/test.txt") textFile.count() textFile.first()
輸出結果
livy 的查詢spark REST接口
測試實例二: Data Refine 下載須要bank數據,http://archive.ics.uci.edu/ml/machine-learning-databases/00222/bank.zip 首先,將csv格式數據轉成Bank對象RDD,並過濾表頭列 上傳到主節點: unzip bank.zip
hdfs dfs -mkdir /tmp/test hdfs dfs -put bank-full.csv bank.csv bank-names.txt /tmp/test
建立一個spark的notebook val bankText = sc.textFile("/tmp/test/bank-full.csv") case class Bank(age:Integer, job:String, marital : String, education : String, balance : Integer) val bank = bankText.map(s=>s.split(";")).filter(s=>s(0)!="\"age\"").map( s=>Bank(s(0).toInt, s(1).replaceAll("\"", ""), s(2).replaceAll("\"", ""), s(3).replaceAll("\"", ""), s(5).replaceAll("\"", "").toInt ) ) // Below line works only in spark 1.3.0. // For spark 1.1.x and spark 1.2.x, // use bank.registerTempTable("bank") instead. bank.toDF().registerTempTable("bank")
執行如下語句,可看到年齡的分佈: %sql select age, count(1) from bank where age < 30 group by age order by age
根據婚姻情況選項,查看年齡分佈情況: %sql select age, count(1) from bank where marital="${marital=single,single|divorced|married}" group by age order by age
spark job 的分佈
使用zeppelin 的配置 hive 鏈接 create Interpreters
artifact的骨架配置 /opt/cloudera/parcels/CDH/jars/hive-jdbc-2.1.1-cdh6.3.2.jar /opt/cloudera/parcels/CDH/jars/hive-service-rpc-2.1.1-cdh6.3.2.jar /opt/cloudera/parcels/CDH/jars/hive-cli-2.1.1-cdh6.3.2.jar /opt/cloudera/parcels/CDH/jars/hive-service-2.1.1-cdh6.3.2.jar /opt/cloudera/parcels/CDH/jars/hive-common-2.1.1-cdh6.3.2.jar /opt/cloudera/parcels/CDH/jars/hive-serde-2.1.1-cdh6.3.2.jar 保存退出: