搭建Hadoop+Python的大数据开发环境
实验环境
CentOS镜像为CentOS-7-x86_64-Everything-1804.iso
虚机配置
节点名称 | IP地址 | 子网掩码 | CPU/内存 | 磁盘 | 安装方式 |
---|---|---|---|---|---|
master | 192.168.204.101 | 255.255.255.0 | 1核心/4GB | 100GB | GNOME Desktop |
slave1 | 192.168.204.111 | 255.255.255.0 | 1核心/2GB | 100GB | Minimal Install |
slave2 | 192.168.204.112 | 255.255.255.0 | 1核心/2GB | 100GB | Minimal Install |
软件清单
软件名称 | 版本号 |
---|---|
Hadoop | 2.8.1 |
Hive | 2.1.1 |
Sqoop | 1.4.6 |
Java | 1.8.0_131 |
MariaDB | 5.5.60 |
Python | 2.7.5/3.6.2 |
配置基本环境
安装虚拟机
master节点以GNOME Desktop
安装
slave节点以Minimal Install
安装
用户名 | 密码 |
---|---|
root | hadoop |
hadoop | hadoop |
配置网络
该项同时在master、slave1、slave2节点配置。
该项使用root
身份配置。
检查网络连通性
[root@localhost ~]# ping 114.114.114.114 -c 4
修改dns地址
[root@localhost ~]# vi /etc/resolv.conf
#修改为
nameserver 223.5.5.5
更换阿里yum源 [1]
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
更换阿里pip源 [2]
mkdir ~/.pip/
vim ~/.pip/pip.conf
写入以下内容
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
yum方式安装基本工具
[root@localhost ~]# yum install -y tree vim epel-* net-tools ntpdate wget
编辑网络配置
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
根据虚机配置表配置以下信息
TYPE="Ethernet"
UUID="17cd99b5-4414-4f6e-b7a3-e573104dd306"
ONBOOT="yes"
DEVICE="ens33"
NAME="ens33"
BOOTPROTO="static"
IPADDR=192.168.204.101
NETMASK=255.255.255.0
GATEWAY=192.168.204.2
DNS1=223.5.5.5
保存退出后,重启网络服务
[root@localhost ~]# systemctl restart network
查看网络信息
[root@localhost ~]# ifconfig
配置防火墙
该项同时在master、slave1、slave2节点配置。
该项使用root
身份配置。
关闭并禁止自动启动防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
禁止SELinux
[root@localhost ~]# setenforce 0
配置禁止开机自启SELinux
[root@localhost ~]# vim /etc/selinux/config
将SELINUX=enforcing
改成SELINUX=disabled
修改主机名
该项同时在master、slave1、slave2节点配置。
该项使用root
身份配置。
修改network配置文件
[root@localhost ~]# vim /etc/hostname
主节点修改为master
,从节点相应修改为slave1
,slave2
输入以下命令(从节点修改为相应名称)
[root@localhost ~]# hostname master
重启虚机
[root@localhost ~]# reboot
重新进入控制台,检验修改
[root@master ~]# hostname
修改hosts文件
该项同时在master、slave1、slave2节点配置。
该项使用root
身份配置。
输入以下命令,配置hosts文件
[root@master ~]# vim /etc/hosts
根据实验环境,添加以下条目至hosts文件
192.168.204.101 master
192.168.204.111 slave1
192.168.204.112 slave2
检查hosts是否生效
ping master
ping slave1
ping slave2
配置时钟同步
该项同时在master、slave1、slave2节点配置。
该项使用root
身份配置。
配置定时任务
crontab -e
#输入以下配置,设置同步时间的定时任务
0 1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
使用下列命令,使时间立即同步
/usr/sbin/ntpdate cn.pool.ntp.org
配置免密登录
该项使用hadoop
用户身份配置。
该项按照步骤依次在各个节点配置。
主节点master
在主节点master输入以下命令生成秘钥
[hadoop@master ~]$ ssh-keygen -t rsa
复制公钥文件
[hadoop@master ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
从节点slave1
在从节点slave1输入以下命令生成秘钥,并将秘钥发送给master
[hadoop@slave1 ~]$ ssh-keygen -t rsa
[hadoop@slave1 ~]$ cp ~/.ssh/id_rsa.pub ~/.ssh/slave1-id_rsa.pub
[hadoop@slave1 ~]$ scp ~/.ssh/slave1-id_rsa.pub hadoop@master:~/
[hadoop@slave1 ~]$ rm -rf ~/.ssh/slave1-id_rsa.pub
从节点slave2
在从节点slave2输入以下命令生成秘钥,并将秘钥发送给master
[hadoop@slave2 ~]$ ssh-keygen -t rsa
[hadoop@slave2 ~]$ cp ~/.ssh/id_rsa.pub ~/.ssh/slave2-id_rsa.pub
[hadoop@slave2 ~]$ scp ~/.ssh/slave2-id_rsa.pub hadoop@master:~/
[hadoop@slave2 ~]$ rm -rf ~/.ssh/slave2-id_rsa.pub
主节点master
复制从节点的秘钥文件,追加到authorized_keys
文件中
[hadoop@master ~]$ cat ~/slave1-id_rsa.pub >> ~/.ssh/authorized_keys
[hadoop@master ~]$ cat ~/slave2-id_rsa.pub >> ~/.ssh/authorized_keys
修改authorized_keys
文件权限,并复制到从节点
[hadoop@master ~]$ chmod 600 ~/.ssh/authorized_keys
[hadoop@master ~]$ scp ~/.ssh/authorized_keys hadoop@slave1:~/
[hadoop@master ~]$ scp ~/.ssh/authorized_keys hadoop@slave2:~/
从节点slave1
修改authorized_keys
文件权限,并复制到ssh文件夹
[hadoop@slave1 ~]$ chmod 600 ~/authorized_keys
[hadoop@slave1 ~]$ cp ~/authorized_keys ~/.ssh
从节点slave2
修改authorized_keys
文件权限,并复制到ssh文件夹
[hadoop@slave2 ~]$ chmod 600 ~/authorized_keys
[hadoop@slave2 ~]$ cp ~/authorized_keys ~/.ssh
主节点master
查看authorized_keys
文件内容
[hadoop@master ~]$ cat ~/.ssh/authorized_keys
测试主节点master到从节点的登录情况
[hadoop@master ~]$ ssh slave1
[hadoop@master ~]$ ssh slave2
导入软件包
主节点master
创建软件包目录、数据目录、代码目录
mkdir ~/software
mkdir ~/data
mkdir ~/code
将软件包上传至~/software
目录
将jdk复制到从节点
cp ~/software/jdk-*.tar.gz ~/
scp ~/jdk-*.tar.gz hadoop@slave1:~/
scp ~/jdk-*.tar.gz hadoop@slave2:~/
安装JDK
该项同时在master、slave1、slave2节点配置。
该项使用root
身份配置。
解压安装java
mkdir /usr/java
cp /home/hadoop/jdk-*.tar.gz /usr/java
cd /usr/java
tar -xzvf jdk-*.tar.gz
配置环境变量
vim /home/hadoop/.bash_profile
# 追加以下内容
#JAVA
export JAVA_HOME=/usr/java/jdk1.8.0_131 #注意替换版本号
export PATH=$JAVA_HOME/bin:$PATH
刷新环境变量
source /home/hadoop/.bash_profile
查看Java版本
java -version
安装Hadoop
该项仅在master主节点配置
该项使用hadoop
身份配置。
解压Hadoop安装包
解压安装包
cp ~/software/hadoop-*.tar.gz ~/
cd ~
tar -xzvf hadoop-*.tar.gz
cd hadoop-*
配置Hadoop
配置环境变量 hadoop-env.sh
输入以下命令,配置hadoop配置文件中的jdk路径
vim /home/hadoop/hadoop-*/etc/hadoop/hadoop-env.sh
将export JAVA_HOME={JAVA_HOME}
修改为export JAVA_HOME=/usr/java/jdk1.8.0_131
注意版本号
配置环境变量 yarn-env.sh
输入以下命令,配置yarn配置文件中的jdk路径
vim /home/hadoop/hadoop-*/etc/hadoop/yarn-env.sh
将export JAVA_HOME=/home/y/libexec/jdk1.6.0/
修改为export JAVA_HOME=/usr/java/jdk1.8.0_131/
配置核心组件 core-site.xml
输入以下命令
vim /home/hadoop/hadoop-*/etc/hadoop/core-site.xml
用以下文本替代
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoopdata</value>
</property>
</configuration>
配置 hdfs-site.xml
输入以下命令
vim /home/hadoop/hadoop-*/etc/hadoop/hdfs-site.xml
用以下文本替代
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
配置 yarn-site.xml
输入以下命令
vim /home/hadoop/hadoop-*/etc/hadoop/yarn-site.xml
用以下文本替代
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:18040</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:18030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:18025</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:18141</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:18088</value>
</property>
</configuration>
配置 mapred-site.xml
输入以下命令
vim /home/hadoop/hadoop-*/etc/hadoop/mapred-site.xml
写入以下文本
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
配置slaves文件
输入以下命令
vim /home/hadoop/hadoop-*/etc/hadoop/slaves
替换成以下内容
slave1
slave2
复制到从节点
输入以下命令,将master的hadoop程序复制到从节点
scp -r /home/hadoop/hadoop-2.8.1/ hadoop@slave1:~/
scp -r /home/hadoop/hadoop-2.8.1/ hadoop@slave2:~/
配置Hadoop环境变量
输入以下命令,添加环境变量
vim ~/.bash_profile
#追加以下内容
#HADOOP
export HADOOP_HOME=/home/hadoop/hadoop-2.8.1
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
刷新环境变量
source ~/.bash_profile
创建数据目录
该项仅在master主节点配置
该项使用hadoop
身份配置。
在master,slave上,创建数据目录
mkdir /home/hadoop/hadoopdata
在master上,执行格式化HDFS文件系统命令
hdfs namenode -format
出现以下信息,表示格式化成功
启动Hadoop集群
执行以下命令,启动Hadoop集群
start-all.sh
Hadoop启动过程如下
在master上执行以下命令,查看进程
jps
正常情况下,会出现如下信息:
在slave上执行以下命令,查看进程
jps
正常情况下,会出现如下信息:
查看Web UI
浏览器输入http://master:50070/
,检查NameNode和DataNode是否正常启动
浏览器输入http://master:18088/
,检查Yarn是否正常
验证Hadoop——跑一个Demo
Hadoop自带有PI示例的jar包,执行以下命令调用集群进行计算:
hadoop jar /home/hadoop/hadoop-2.8.1/share/hadoop/mapreduce/hadoopmapreduce-examples-2.8.1.jar pi 10 10
运行过程
运行结果如下
验证HDFS
该项仅在master主节点配置
该项使用hadoop
身份配置。
在命令行依次输入以下命令
hdfs dfs -ls /
hdfs dfs -mkdir /data
hdfs dfs -ls /
可查看刚刚创建的目录
编辑一个文本文件
mkdir /home/hadoop/data/words
vim /home/hadoop/data/words/word.txt
写入以下内容
hadoop hello world
hello hadoop hello
world hadoop hello
将本地文件上传至HDFS
hdfs dfs -mkdir /data/words
hdfs dfs -put /home/hadoop/data/word/*.txt /data/words/
hdfs dfs -ls /data/words/
hdfs dfs -cat /data/words/*.txt
安装Hive
该项仅在master主节点配置
该项使用root
身份配置。
解压Hive安装包
解压安装Hive
cp /home/hadoop/software/apache-hive-*-bin.tar.gz /home/hadoop/
cd /home/hadoop
tar -xzvf /home/hadoop/apache-hive-*-bin.tar.gz
cd /home/hadoop/apache-hive-*-bin
安装MariaDB
安装配置MariaDB
yum install mariadb-server -y
启动MariaDB
systemctl start mairadb
systemctl enable mairadb
输入以下命令,修改MariaDB密码
mysql_secure_installation
登录数据库,添加数据
mysql -uroot -p123456
输入以下SQL语句,添加mysql用户
grant all on *.* to hadoop@'%' identified by 'hadoop';
grant all on *.* to hadoop@'localhost' identified by 'hadoop';
grant all on *.* to hadoop@'master' identified by 'hadoop';
flush privileges;
create database hive_1;
quit;
配置Hive
该项仅在master主节点配置
该项使用hadoop
身份配置。
输入以下命令,修改Hive配置
vim /home/hadoop/apache-hive-*-bin/conf/hive-site.xml
添加以下配置信息
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive_1?characterEncoding=UTF-8</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hadoop</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hadoop</value>
</property>
</configuration>
将mysql的java connector复制到依赖库中
cd ~/software/
tar -xzvf mysql-connector-java-5.1.27.tar.gz
cd ~/software/mysql-connector-java-5.1.27
cp mysql-connector-java-5.1.27-bin.jar ~/apache-hive-*bin/lib/
将hive添加至环境变量
vim ~/.bash_profile
#添加以下内容
#HIVE
export HIVE_HOME=/home/hadoop/apache-hive-2.1.1-bin
export PATH=$PATH:$HIVE_HOME/bin
刷新环境变量
source ~/.bash_profile
初始化hive元数据库 [3]
schematool -dbType mysql -initSchema
启动并验证Hive
输入以下命令,启动hive
hive
正常启动如下:
输入以下HQL语句
show databases;
create database hadoop_data;
show databaes;
安装Sqoop
该项仅在master主节点配置
该项使用hadoop
身份配置。
解压Sqoop安装包
cp ~/software/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz ~/
cd ~
tar -xzvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
cd ~/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
配置MySQL连接器
cd ~/software/mysql-connector-java-5.1.27
cp mysql-connector-java-5.1.27-bin.jar ~/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/
配置Sqoop
输入以下命令,编辑配置文件
cd ~/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/conf/
cp sqoop-env-template.sh sqoop-env.sh
替换为以下内容
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/home/hadoop/hadoop-2.8.1
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/home/hadoop/hadoop-2.8.1
#set the path to where bin/hbase is available
#export HBASE_HOME=
#Set the path to where bin/hive is available
export HIVE_HOME=/home/hadoop/apache-hive-2.1.1-bin
替换时注意版本号
配置环境变量
输入以下命令,修改环境变量
vim ~/.bash_profile
#追加以下内容
#SQOOP
export SQOOP_HOME=/home/hadoop/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
export PATH=$SQOOP_HOME/bin:$PATH
刷新环境变量
source ~/.bash_profile
此时,~/.bash_profile
文件的内容如下
启动并验证Sqoop
执行以下命令,查看安装是否成功
sqoop help
正确情况,如图所示
安装Python3.X [4]
该项在各个节点使用root
用户配置
安装依赖包
yum install -y zlib-devel bzip2-devel \
openssl-devel ncurses-devel sqlite-devel \
readline-devel tk-devel gcc make
备份原Python可执行文件
mv /usr/bin/python /usr/bin/python.bak
下载并解压python3.x
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
tar -xvJf Python-3.6.2.tar.xz
cd Python-3.*
编译安装
./configure prefix=/usr/local/python3
make && make install
创建软连接
创建软连接
ln -s /usr/local/python3/bin/python3 /usr/bin/python
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/python3 /usr/bin/python3.6
查看/usr/bin/
目录下的python
程序
ls -l /usr/bin/python*
输入命令查看各程序版本
python -V
python2 -V
python2.7 -V
python3 -V
python3.6 -V
修改对python2
的依赖
- 修改
yum
配置
vim /usr/bin/yum
将#!/usr/bin/python
修改为#!/usr/bin/python2
- 修改
urlgrabber-ext-down
配置
vim /usr/libexec/urlgrabber-ext-down
将#!/usr/bin/python
修改为#!/usr/bin/python2
配置pip3
mv /usr/bin/pip /usr/bin/pip.bak
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
查看修改情况
ls -l /usr/bin/pip*
一键安装脚本
centos7 安装Python3.x的脚本
网速略差时不建议使用
#!/bin/bash
yum install -y zlib-devel bzip2-devel openssl-devel \
ncurses-devel sqlite-devel readline-devel tk-devel gcc make
mv /usr/bin/python /usr/bin/python.bak
cd ~
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
tar -xvJf Python-3.6.2.tar.xz
cd ~/Python-3.6.2/
./configure prefix=/usr/local/python3
make && make install
ln -s /usr/local/python3/bin/python3 /usr/bin/python
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/python3 /usr/bin/python3.6
ls -l /usr/bin/python*
python -V
python2 -V
python2.7 -V
python3 -V
python3.6 -V
sed -i 's/#!\/usr\/bin\/python/#!\/usr\/bin\/python2/g' /usr/bin/yum
sed -i 's/#!\/usr\/bin\/python/#!\/usr\/bin\/python2/g' /usr/libexec/urlgrabber-ext-down
mv /usr/bin/pip /usr/bin/pip.bak
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
ls -l /usr/bin/pip*
安装开发软件
在master节点使用root
用户
安装IPython
pip3 install ipython
安装数据分析的常用库
pip3 install matplotlib
pip3 install numpy
pip3 install PyMySQL
pip3 install PrettyTable
mkdir /home/hadoop/code/lib/
wget -O /home/hadoop/code/lib/echarts.js http://echarts.baidu.com/dist/echarts.js
安装Spyder [5]
cd /home/hadoop/
wget https://files.pythonhosted.org/packages/e5/e2/cc0dff05e9fd98799f9255809e8359bc05d62c4ff850b1f7cf22d3d662c0/spyder-3.3.4.tar.gz
cp ./spyder-3.3.4.tar.gz /usr/local
cd /usr/local
tar -xzvf ./spyder-3.3.4.tar.gz
cd ./spyder-3.3.4
python3 setup.py install
ln -s /usr/local/spyder-3.3.4/scripts/spyder3 /usr/bin/spyder3
在master节点使用hadoop
用户
打开Spyder
spyder3
使用Python编写一个WordCount示例
在master节点使用hadoop
用户
下载几部英文小说
cd ~/data/
wget https://files.cnblogs.com/files/connect/novel.tar.gz
tar -xzvf novel.tar.gz
将文本文件上传到HDFS
hdfs dfs -mkdir /data/novel
hdfs dfs -put /home/hadoop/data/novel/*.txt /data/novel/
hdfs dfs -ls /data/novel/
编写mapper.py
[6]
#!/usr/bin/python3
#path:/home/hadoop/code/mapper.py
import sys
for line in sys.stdin:
line = line.strip()
words = line.split()
for word in words:
print("%s\t%s" % (word, 1))
pass
编写reducer.py
[6]
#!/usr/bin/python3
#path:/home/hadoop/code/reducer.py
import sys
current_word = None
current_count = 0
word = None
for line in sys.stdin:
line = line.strip()
word, count = line.split('\t', 1)
try:
count = int(count)
except ValueError:
continue
if current_word == word:
current_count += count
else:
if current_word:
print("%s\t%s" % (current_word, current_count))
current_count = count
current_word = word
if word == current_word:
print("%s\t%s" % (current_word, current_count))
pass
给Python程序赋予可执行权限
chmod +x /home/hadoop/code/*.py
调用集群进行计算 [6]
hadoop jar /home/hadoop/hadoop-*/share/hadoop/tools/lib/hadoop-streaming-2.5.2.jar \
-file /home/hadoop/code/mapper.py \
-file /home/hadoop/code/reducer.py \
-mapper /home/hadoop/code/mapper.py \
-reducer /home/hadoop/code/reducer.py \
-input /data/novel/* \
-output /data/result/
查看HDFS上的结果
hdfs dfs -ls /data/result
hdfs dfs -cat /data/result/part-*
将HDFS上的结果下载到本地
cd ~/data
mkdir ./result
hdfs dfs -get /data/result/part-* /home/hadoop/data/result/
cat /home/hadoop/data/result/part-* | more
将数据加载至Hive
进入hive
,将数据加载至hive,然后统计top20高频词
-- 创建数据库
create database if not exists wordcount_data;
-- 使用wordcount_data数据库
use wordcount_data;
-- 创建数据表
create table if not exists wordcount1 (
word string,
count int
) row format delimited
fields terminated by '\t'
stored as textfile;
-- 加载数据
load data inpath '/data/result/' overwrite into table wordcount_data.wordcount1;
-- 查询TOP20高频词
select * from wordcount_data.wordcount1
order by count desc
limit 20;
-- 将TOP20高频词导入新的数据表
create table if not exists wordcount1_top20
as
select word, count
from wordcount_data.wordcount1
order by count desc
limit 20;
-- 查看wordcount1_top20数据表中的数据
select * from wordcount1_top20 where true;
查询结果
创建MySQL数据表
进入MySQL数据库
mysql -uhadoop -phadoop
创建MySQL数据库
-- 创建数据库
create database if not exists wordcount_data;
-- 使用wordcount_data
use wordcount_data;
-- 创建数据表
create table if not exists wordcount1_top20 (
word varchar(128),
count int
)default charset=utf8;
-- 查看创建的数据表
show tables;
利用Sqoop将数据导出至MySQL
master节点执行导出操作 [7]
sqoop export \
--connect jdbc:mysql://192.168.204.101:3306/wordcount_data \
--username hadoop \
--password hadoop \
--table wordcount1_top20 \
--export-dir "/user/hive/warehouse/wordcount_data.db/wordcount1_top20" \
--fields-terminated-by '\001'
导出成功如图
查看MySQL数据库
use wordcount_data;
show tables;
select * from wordcount1_top20 where 1;
使用matplotlib生成图表 [8]
程序如下:
#!/usr/bin/python3
import pymysql
import numpy as np
import matplotlib.pyplot as plt
# get data from mysql
def get_data():
db = pymysql.connect('192.168.204.101', 'hadoop', 'hadoop', 'wordcount_data')
sql = 'select * from wordcount1_top20 where 1 order by count desc limit 20;'
cursor = db.cursor()
length = cursor.execute(sql)
data = cursor.fetchall()
db.close()
data = np.array(data)
data = data.T
return data
# show chart
def show_chart(data):
labels, sizes = data[0], data[1]
fig1, ax1 = plt.subplots()
ax1.pie(sizes, labels=labels, autopct='%1.1f%%', shadow=True, startangle=90)
ax1.axis('equal')
plt.show()
if __name__ == '__main__':
data = get_data()
show_chart(data)
效果如下
参考资料
- [1] 阿里巴巴开源镜像站. https://opsx.alibaba.com/mirror
- [2] 更换pip源到国内镜像. https://blog.csdn.net/chenghuikai/article/details/55258957
- [3] 关于hive异常:Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStor. https://blog.csdn.net/hhj724/article/details/79094138
- [4] linux-Centos7安装python3并与python2共存. https://www.cnblogs.com/blogjun/articles/8063989.html
- [5] spyder · PyPI. https://pypi.org/project/spyder/
- [6] Writing An Hadoop MapReduce Program In Python. http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/
- [7] sqoop导出hive数据到mysql错误ava.util.NoSuchElementException解决办法. https://blog.csdn.net/wangmuming/article/details/25296697
- [8] Basic pie chart — Matplotlib 3.0.3 documentation. https://matplotlib.org/gallery/pie_and_polar_charts/pie_features.html
本文链接: https://www.cnblogs.com/connect/p/hadoop-python-dev-env.html