jupyter访问hive进行数据分析

I 写在前面

  • 长文
    • 为针对华为平台进行数据分析做准备
  • 需要经验
    • Anaconda配置经验
      • 需要请留言
    • hadoop、hive集群配置经验
    • python开发经验
  • 实验内容
    • 基于jupyter针对hive集群进行数据分析
      • 查询结果便于分析、处理、存储、下载
  • 实验材料
    • hadoop集群(hive依赖)(镜像)
    • hive集群(镜像)
    • anaconda2(linux版本)
    • pyhs2-0.6.0.tar.gz
    • sasl-0.2.1.tar.gz
    • thrift-0.11.0.tar.gz

II 集群搭建

  • 1 开启宿主机ip路由转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
  • 2 搭建镜像集群
    • Shell 操作命令
# 1 拉取现有集群镜像
docker pull limengjiao029/hive:v0.1

# 2 基于镜像创建容器实例
docker run --privileged -tid -p 8000:8000 -p 8088:8088 -p 8042:8042 -p 50070:50070 -p 8678:8678 -p10000:10000 limengjiao029/hive:v0.1
      
# 3 进入容器,替换容器 ID, 需要Docker基础
docker exec -ti containerID /bin/bash

# 4 启动 hadoop
/opt/modules/hadoop-2.7.7/sbin/start-all.sh

# 5 启动metastore服务
# 5.1 无日志启动
	# nohup hive --service metastore 2>&1 & 
nohup hive --service metastore >> ~/metastore.log 2>&1 &

# 6 启动hiveserver2服务,jdbc连接均需要
# 6.1 无日志启动
	# nohup hive --service hiveserver2 2>&1 &
# 6.2 查看hiveserver2 进程 
	# ps -aux| grep hiveserver2
# 6.3 杀死进程
	# kill -9 pid
# 6.4 验证是否有效
	# beeline
	# !connect jdbc:hive2://localhost:10000
	# show tables;
nohup hive --service hiveserver2 >> ~/hiveserver2.log 2>&1 &

# 7 安装anaconda2
bash Anaconda2-2019.03-Linux-x86_64.sh
	# 7.1 配置环境变量, 在/etc/profile文件中加入下列语句, 并source生效
	export PATH=/root/anaconda2/bin:$PATH
	source /etc/profile
	# 7.2 判断python是否anaconda2版本
	python -v
# 8 安装sasl
# 8.1 解压 sasl-0.2.1.tar.gz
	# tar -zxvf sasl-0.2.1.tar.gz
	# cd sasl-0.2.1
python setup.py install

# 9 安装thrift
# 9.1 解压 thrift-0.11.0.tar.gz
	# tar -zxvf thrift-0.11.0.tar.gz
	# cd thrift-0.11.0
python setup.py install

# 10 安装pyhs2
# 10.1 解压 pyhs2-0.6.0.tar.gz
	# tar -zxvf pyhs2-0.6.0.tar.gz
	# cd pyhs2-0.6.0
python setup.py install

# 11 配置jupyter_notebook_config.py
	# 11.1 密码生成命令
	# from notebook.auth import passwd
	# passwd()
c.NotebookApp.allow_remote_access = True
c.NotebookApp.allow_root = True
c.NotebookApp.ip = '*'
c.NotebookApp.notebook_dir = u'/home/jupyter_root_dir'
c.NotebookApp.open_browser = False
c.NotebookApp.password = u'sha1:4600e66850b0:aedd50f9cabd7102cbcb1c8ba38d4e2500e46f67'
c.NotebookApp.port = 8678

# 12 后台驻留启动jupyter notebook
nohup jupyter notebook --allow-root >> nohup.out 2>&1 &
- 运行效果
	- 192.168.232.128为虚拟机IP地址(容器运行时,已将8678端口映射到宿主机)

jupyter访问hive进行数据分析_第1张图片

  • 3 额外命令
# 查看文件行数据量
wc -l person.txt

# 清空文件
cat /dev/null > /data/target.log

# jdbc链接 hiveserver, 默认端口 10000
!connect jdbc:hive2://localhost:10000

III Jupyter访问远程Hive

  • 示例代码
    • 须知道访问 hive 用户名、密码
    • jdbc 默认端口 10000,docker run 时已将端口映射到宿主机
    • hive 集群数据表等资源参考地址
import pyhs2
import pandas as pd
pd.set_option("display.max_rows",500)
pd.set_option("display.max_columns",200)
pd.set_option("display.max_colwidth",500)

conn= pyhs2.connect(host='localhost',port=10000,authMechanism="PLAIN",user='root',password='root',database='default')
cursor=conn.cursor()

sql = """
select * from person limit 30
"""
cursor.execute(sql)
results = cursor.fetchall()
result_df = pd.DataFrame(results, columns=['name','cert_code'])
  • 查看hive表结构
conn= pyhs2.connect(host='localhost',port=10000,authMechanism="PLAIN",user='root',password='root',database='default')
cursor=conn.cursor()

sql = """
desc formatted person
"""
cursor.execute(sql)
data = cursor.fetchall()

tab_schema = pd.DataFrame(data,columns=['col_name','data_type','comment'])
tab_schema

IV 参考文章

  • hive的启动和停止
  • Docker容器学习梳理–容器间网络通信设置(Pipework和Open vSwitch)
  • Docker的网络模式bridge、host、container other、overlay
  • Python 操作 MySQL 数据库

VI 最后小结

  • 实验耗费个人很长时间(至少3天),涉及技术面比较广
  • 涉及到Hive访问原理,之前脑壳里还是有些混乱
    • 容器联网问题,耗时最多
    • thrift、sasl、pyhs2 安装失败
      • Could not start SASL: Error in sasl_client_start (-4) SASL(-4): no mechanism available

你可能感兴趣的:(数据处理与分析,Hive系列)