如何在Aliyun E-MapReduce集群上使用Zeppelin和Hue

前言

目前Aliyun E-MapReduce支持了Appache Zeppelin和Hue,在Aliyun E-MapReduce集群上可以很方便的使用zeppelinhue

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 root@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 root@xx.xx.xx.xx免密登录master节点了。

  • d). 在本机执行以下命令进行端口转发
ssh -i ~/.ssh/id_rsa -ND 8157 root@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配置直接导入。

sample

shell demo

hive demo

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目录下:

  • 1) 直接ssh登录到master节点上:
ssh root@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"
  • 2) 这直接使用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"

  • 3) 通过Hue的file browser上传

通过hue的Metastore manager创建表。

然后一路next直到最后create table完成建表。刷新Query Editor界面在左侧的DATABASE导航栏可以看到新建的表。

在Hive Editor中执行

select * from us_map

时间: 2024-07-29 20:29:55

如何在Aliyun E-MapReduce集群上使用Zeppelin和Hue的相关文章

EMR集群上capacity scheduler的ACL实现

背景 前面一篇介绍了yarn的capacity scheduler原理,实验了在EMR集群上使用capacity scheduler对集群资源的隔离和quota的限制.本文会介绍EMR集群上capacity scheduler的ACL实现. 为什么要做这个?前面给集群分配的资源分配了多个队列,以及每个队列的资源配比和作业调度的优先级.如果多租户里面的每个都按照约定,各自往自己对应的队列里面提交作业,自然没有问题.但是如果用户熟悉capacity scheduler的操作和原理,也是可以占用别组的

《Spark Cookbook 中文版》一1.5 在集群上以独立模式部署Spark

1.5 在集群上以独立模式部署Spark 在分布式环境中的计算资源需要管理,使得资源利用率高,每个作业都有公平运行的机会.Spark有一个便利的被称为独立模式的自带集群管理器.Spark也支持使用YARN或者Mesos做为集群管理器. 选择集群处理器时,主要需要考虑延迟以及其他架构,例如MapReduce,是否共享同样的计算资源池.如果你的集群运行着旧有的MapReduce作业,并且这些作业不能转变为Spark作业,那么使用YARN作为集群管理器是个好主意.Mesos是一种新兴的.方便跨平台管理

代码-vsphere api 在vcenter上有多个集群,需要克隆的模版在一个集群上,怎么指定集群

问题描述 vsphere api 在vcenter上有多个集群,需要克隆的模版在一个集群上,怎么指定集群 公司现在有个需求,需要通过模版克隆虚拟机,在一个集群中通过API克隆没有问题,换了一个环境有两个集群,用原来的代码报错说指定的参数错误.在clone的配置中没有找到集群相关参数,求大神指导 解决方案 什么是集群

grep-用shell脚本读取Hadoop集群上的文件

问题描述 用shell脚本读取Hadoop集群上的文件 我想用grep -Ff 命令提取hadoop上两个文件中相同的内容, 例如hadoop上的文件位置为/hadoop/file1和/hadoop/file2, 我想在本地用shell脚本编写比较hadoop上这两个文件内容的代码,求指点 解决方案 需要脚步跑到Hadoop.本地没法获取

《循序渐进学Spark》一1.2 在Linux集群上部署Spark

1.2 在Linux集群上部署Spark Spark安装部署比较简单,用户可以登录其官方网站(http://spark.apache.org/downloads.html)下载Spark最新版本或历史版本,也可以查阅Spark相关文档作为参考.本书开始写作时,Spark刚刚发布1.5.0版,因此本章所述的环境搭建均以Spark 1.5.0版为例. Spark使用了Hadoop的HDFS作为持久化存储层,因此安装Spark时,应先安装与Spark版本相兼容的Hadoop. 本节以阿里云Linux主

Kubernetes集群上基于Jenkins的CI/CD流程实践

本节我们通过在Kubernetes集群上创建并配置Jenkins Server实现应用开发管理的CI/CD流程,并且利用Kubernetes-Jenkins-Plugin实现动态的按需扩展jenkins-slave. 安装Kubernetes集群 首先,如果您没有Kubernetes集群,那么您需要创建一个.参见创建集群 安装Jenkins Server 为了让您的Jenkins Server可以具有Fail Over的能力,建议您将Jenkins的数据存储到阿里云NAS存储上. 步骤一: 首先

《Spark Cookbook 中文版》一1.6 在集群上使用Mesos部署Spark

1.6 在集群上使用Mesos部署Spark Mesos正慢慢崛起为跨数据中心管理所有计算资源的数据中心管理系统.Mesos可以运行在任意一台Linux操作系统的机器上.Mesos与Linux内核有着相同的配置原则.让我们看看如何安装Mesos. 具体步骤 Mesosphere提供Mesos的二进制安装包.最新的Mesos分布式安装包可以通过Mesosphere库按照如下步骤安装. 1.在Ubuntu操作系统的可靠版本上执行Mesos. $ sudo apt-key adv --keyserve

Spark学习之在集群上运行Spark(6)

Spark学习之在集群上运行Spark(6) 1. Spark的一个优点在于可以通过增加机器数量并使用集群模式运行,来扩展程序的计算能力. 2. Spark既能适用于专用集群,也可以适用于共享的云计算环境. 3. Spark在分布式环境中的架构: Created with Raphaël 2.1.0我的操作集群管理器Mesos.YARN.或独立集群管理器N个集群工作节点(执行器进程) Spark集群采用的是主/从结构,驱动器(Driver)节点和所有执行器(executor)节点一起被称为一个S

《Spark Cookbook 中文版》一1.7 在集群上使用YARN部署

1.7 在集群上使用YARN部署 另一种资源协调者(YARN)是基于HDFS这个Hadoop存储层的Hadoop计算框架. YARN遵循主从架构.主守护进程被称为资源管理器(ResourceManager),从守护进程被称为节点管理器(NodeManager).除此之外,生命周期管理由ApplicationMaster负责,它可以被派生到任何从节点上并可以生存一个应用的生命周期时长. 如果Spark运行在YARN上的话,资源管理器充当Spark master,节点管理器充当执行节点. 如果Spa