Hadoop視覺化與互動式工具:Zeppelin和Hue
前言
目前Aliyun E-MapReduce支援了Appache Zeppelin和Hue,在Aliyun E-MapReduce叢集上可以很方便的使用zeppelin和hue。
Apache Zeppelin是一個提供了web版的類似ipython的notebook,用於做資料分析和視覺化。背後可以接入不同的資料處理引擎,包括spark, hive, tajo等,原生支援scala, java, shell, markdown等。它的整體展現和使用形式和Databricks Cloud是一樣的,就是來自於當時的demo。
Hue是一個開源的Apache Hadoop UI系統,最早是由Cloudera Desktop演化而來,由Cloudera貢獻給開源社群,它是基於Python Web框架Django實現的。通過使用Hue我們可以在瀏覽器端的Web控制檯上與Hadoop叢集進行互動來分析處理資料,例如操作HDFS上的資料,執行MapReduce Job等等。
準備工作
建立叢集
建立叢集的時候選擇E-MapReduce支援zeppelin和hue主版本。目前E-MapReduce支援Zeppelin和Hue的主版本為1.3.0。建立叢集的時候記得設定開啟公網ip。
打通ssh無密登入並建立一個SSH隧道
叢集建立完成之後,需要建立一個ssh隧道來訪問叢集的8888和8080埠。詳細步驟參考:https://help.aliyun.com/document_detail/28187.html
這裡以mac環境為例,使用chrome瀏覽器實現埠轉發(假設叢集master節點公網ip為xx.xx.xx.xx):
-
a). 登入到master節點
ssh r***@xx.xx.xx.xx
輸入密碼
-
b). 檢視本機的id_rsa.pub內容(注意在本機執行,不要在遠端的master節點上執行)
cat ~/.ssh/id_rsa.pub
-
c). 將本機的id_rsa.pub內容寫入到遠端master節點的~/.ssh/authorized_keys中(在遠端master節點上執行)
mkdir ~/.ssh/
vim ~/.ssh/authorized_keys
然後將步驟b)中看到的內容貼上進來
現在應該可以直接使用ssh r***@xx.xx.xx.xx免密登入master節點了。
-
d). 在本機執行以下命令進行埠轉發
ssh -i ~/.ssh/id_rsa -ND 8157 r***@xx.xx.xx.xx
-
e). 啟動chrome(在本機新開terminal執行)
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --proxy-server="socks5://localhost:8157" --host-resolver-rules="MAP * 0.0.0.0 , EXCLUDE localhost" --user-data-dir=/tmp
-
f). 在新開啟的chrome中訪問Zeppelin和Hue
zeppelin: xx.xx.xx.xx:8080
hue: xx.xx.xx.xx:8888
操作步驟和示例
Zepplein
在chrome中訪問xx.xx.xx.xx:8080,首先建立一個新的noteboook
一個簡單的zeppelin示例
-
支援markdown語法
%md
## Welcome to Aliyun E-MapReduce. This is a Zeppelin sample.
##### This is a live tutorial, you can run the code yourself. (Shift-Enter to Run)
-
原生支援scala。使用scala進行load資料
import org.apache.commons.io.IOUtils
import java.net.URL
import java.nio.charset.Charset
// Zeppelin creates and injects sc (SparkContext) and sqlContext (HiveContext or SqlContext)
// So you don't need create them manually
// load bank data
val bankText = sc.parallelize(
IOUtils.toString(
new URL("http://emr-sample-projects.oss-cn-hangzhou.aliyuncs.com/bank.csv"),
Charset.forName("utf8")).split("\n"))
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
)
).toDF()
bank.registerTempTable("bank")
-
使用spark sql查詢和展示結果
%sql
select age, count(1) value
from bank
where age < 30
group by age
order by age
%sql
select age, count(1) value
from bank
where age < ${maxAge=30}
group by age
order by age
%sql
select age, count(1) value
from bank
where marital="${marital=single,single|divorced|married}"
group by age
order by age
zeppelin 執行shell示例
%sh
cd /tmp
wget http://emr-sample-projects.oss-cn-hangzhou.aliyuncs.com/bank.csv
ls -la
rm bank.csv
ls -la
su -l hadoop -c "hadoop dfs -ls /"
zeppelin上執行hive sql示例
-
Download Spending Dataset into HDFS
%sh
#remove existing copies of dataset from HDFS
su -l hadoop -c "hadoop fs -rm /tmp/expenses.csv"
#fetch the dataset
wget http://emr-sample-projects.oss-cn-hangzhou.aliyuncs.com/healthexpenditurebyareaandsource.csv -O /tmp/expenses.csv
#remove header
sed -i '1d' /tmp/expenses.csv
#remove empty fields
sed -i "s/,,,,,//g" /tmp/expenses.csv
sed -i '/^\s*$/d' /tmp/expenses.csv
#put data into HDFS
su -l hadoop -c "hadoop fs -put /tmp/expenses.csv /tmp"
su -l hadoop -c "hadoop fs -ls -h /tmp/expenses.csv"
rm /tmp/expenses.csv
%hive
drop table if exists `health_table`
-
Create Hive table
%hive
CREATE TABLE `health_table` (
`year` string ,
`state` string ,
`category` string ,
`funding_src1` string,
`funding_src2` string,
`spending` int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TextFile
-
Load dataset into Hive table
%hive
load data
inpath '/tmp/expenses.csv'
into table health_table
-
Grant permissions
%hive
select count(*) from health_table
-
Spending (In Billions) By State
%hive
select state, sum(spending)/1000 SpendinginBillions
from health_table
group by state
order by SpendinginBillions desc
-
Spending (In Billions) By Year
%hive
select year,sum(spending)/1000 SpendinginBillions
from health_table
group by year
order by SpendinginBillions
-
Spending (In Billions) By Category
%hive
select category, sum(spending)/1000 SpendinginBillions from health_table
group by category
order by SpendinginBillions desc
zeppelin notebook json配置
zeppelin的每個notebook都是可以儲存、匯入和匯出的。上面的三個示例,可以通過下載json配置直接匯入。
zeppelin插圖
zeppelin中的插圖,都可以進行復制和儲存:
Hue
通過xx.xx.xx.xx:8888訪問Hue。第一次登陸hue的時候,需要設定一個管理員賬戶和密碼。請慎重設定和保管你的Hue管理員賬戶和密碼資訊。
Hive Editor
通過Hive Editor可以進行hive sql的編寫和互動式執行。在左邊欄DATABASE中會展示當前的資料庫和表資訊。
Metastore Manager
通過Metastore Manager可以檢視和管理hive表,可以視覺化建立表。
File Browser
通過File Browser可以檢視和管理到hdfs上的檔案。
示例程式碼
這裡展示一個通過hue metastore介面從檔案建表的過程,並通過Hive Editor對錶中的資料做查詢和展示的例子。
首先,下載資料檔案到master節點,並且將該檔案放入hdfs的/tmp目錄下。可以ssh到master節點上操作,也可以直接使用zepplein的shell notebook。
有三種方式可以實現將資料檔案放在hdfs的/tmp目錄下:
-
直接ssh登入到master節點上:
ssh r***@xx.xx.xx.xx
cd /tmp
wget http://emr-sample-projects.oss-cn-hangzhou.aliyuncs.com/us_map.csv
su -l hadoop -c "hadoop fs -put /tmp/us_map.csv /tmp/us_map.csv"
su -l hadoop -c "hadoop fs -ls -h /tmp/us_map.csv"
-
這直接使用zeppelin的shell notebook操作:
%sh
cd /tmp
wget http://emr-sample-projects.oss-cn-hangzhou.aliyuncs.com/us_map.csv
%sh
su -l hadoop -c "hadoop fs -put /tmp/us_map.csv /tmp/us_map.csv"
%sh
su -l hadoop -c "hadoop fs -ls -h /tmp/us_map.csv"
-
通過Hue的file browser上傳
通過hue的Metastore manager建立表。
然後一路next直到最後create table完成建表。重新整理Query Editor介面在左側的DATABASE導航欄可以看到新建的表。在Hive Editor中執行
select * from us_map
宣告
歡迎轉載,關注大資料技術研究社群。
相關文章
- Google推出Cloud Datalab:資料探索與視覺化的互動式工具GoCloud視覺化
- 互動式資料視覺化的優勢視覺化
- 基於Python實現互動式資料視覺化的工具(用於Web)Python視覺化Web
- hdp zeppelin 資料視覺化分析配置視覺化
- [譯] VINE:一種開源的神經進化(Neuroevolution)互動式資料視覺化工具視覺化
- CNN視覺化技術總結(四)--視覺化工具與專案CNN視覺化
- 視覺化搭建 - 元件值與聯動視覺化元件
- 高可用Hadoop平臺-Hue In HadoopHadoop
- Hadoop - Zeppelin 使用心得Hadoop
- 視覺化之資料視覺化最強工具推薦視覺化
- 資料視覺化與資訊視覺化怎麼搞?視覺化
- 視覺化bi工具有哪些視覺化
- 邊玩邊學!互動式視覺化圖解!快收藏這18個機器學習和資料科學網站!⛵視覺化圖解機器學習資料科學網站
- Kafka 視覺化監控和管理 UI工具評估Kafka視覺化UI
- Shader 函式視覺化函式視覺化
- 大資料視覺化安全保障之私密訪問:讓訪問和互動更安全大資料視覺化
- Docker視覺化管理工具Shipyard安裝與配置Docker視覺化
- JDK視覺化故障處理工具JDK視覺化
- MySQL 視覺化管理工具MySql視覺化
- 分享5個視覺化的正規表示式編輯工具視覺化
- 掌握Python庫的Bokeh,就能讓你的互動炫目視覺化Python視覺化
- 資料視覺化初學者指南:定義、示例和工具視覺化
- 同濟大學曹楠“互動式視覺異常檢測及其應用”視覺
- 【matplotlib視覺化】樣式色彩視覺化
- [Echarts視覺化] 二.php和ajax連線資料庫實現動態資料視覺化Echarts視覺化PHP資料庫
- 3D模型+BI分析,打造全新的互動式3D視覺化大屏開發方案3D模型視覺化
- Vue-Layout:視覺化佈局、自動生成程式碼工具Vue視覺化
- .net視覺化表單設計工具視覺化
- 視覺化磁碟清理工具DaisyDisk中文視覺化AI
- 視覺化磁碟清理工具:DaisyDisk for mac視覺化AIMac
- 前端實時視覺化開發工具前端視覺化
- 視覺化三維地圖怎麼做?視覺化工具中的地圖工具視覺化地圖
- 視覺化大神都不知道的6款動態圖表工具,視覺化報告再也不愁了視覺化
- 什麼是視覺動力 ——工業設計與視覺動力視覺
- 優秀視覺/互動設計的三要素視覺
- 視覺化的三大誤區,哪些視覺化工具受歡迎?視覺化
- Python繪圖與視覺化Python繪圖視覺化
- 程式碼視覺化的自動化之路視覺化