搭建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,从节点相应修改为slave1slave2

输入以下命令(从节点修改为相应名称)

[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的依赖

  1. 修改yum配置
vim /usr/bin/yum

#!/usr/bin/python修改为#!/usr/bin/python2

  1. 修改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)

效果如下

参考资料

本文链接: https://www.cnblogs.com/connect/p/hadoop-python-dev-env.html

posted @ 2019-04-07 18:29  varlemon  阅读(2763)  评论(0编辑  收藏  举报