zoukankan      html  css  js  c++  java
  • 搭建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	%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('	', 1)
    	try:
    		count = int(count)
    	except ValueError:
    		continue
    	if current_word == word:
    		current_count += count
    	else:
    		if current_word:
    			print("%s	%s" % (current_word, current_count))
    		current_count = count
    		current_word = word
    
    if word == current_word:
    	print("%s	%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 '	'
        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 '01'
    
    

    导出成功如图

    查看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

  • 相关阅读:
    Android开发之百度地图的简单使用
    Android给ListView添加一个入场动画
    【安卓9】Cursor类、 查询
    【安卓9】SQLiteOpenHelper 类、增删改操作
    【安卓9】SQLiteDatabase类、ContentValues 类
    【安卓9】SQLite数据库
    【安卓8】SD卡操作
    【安卓8】文件的读写
    【安卓8】文件操作
    【安卓7】XML文件解析——PULL解析
  • 原文地址:https://www.cnblogs.com/connect/p/hadoop-python-dev-env.html
Copyright © 2011-2022 走看看