hadoop hive mahout

大数据环境hadoop hive mahout调研文档

                                                     2016817

                                                           李碧

大数据环境hadoop hive mahout调研文档 1

调研环境 1

HIVE 1

Hive HQL查询时间统计 1

Hive表结构 3

hive命令 3

Mahout时间统计 4

Mahout命令 5

附录 6

Hadoop安装前配置 6

Hadoop的安装 7

HIVE安装(jdk,mysql,hadoop已安装完成) 10

mahout安装 13

Mahout测试 14

Mahout聚类 16

调研环境

主机

hadoop

hive

mahout

10.0.6.80

master

已安装

已安装

10.0.6.81

slave

未安装

未安装

10.0.6.83

slave

未安装

未安装

 

HIVE

Hive HQL查询时间统计

查询语句

时间

(秒)

表大小(行数)

备注

create table tcp_stream(sip bigint,slen int,snum int,dip bigint, dlen int,dnum int) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;

0.755

438415

建立

元数据表

 load data local inpath '/home/huangcaiyun/result.txt' into table tcp_stream;

0.764

438415

加载数据到hive

Create table srcip as select sip as ip,sum(slen) as sendlen,sum(snum) as sendnum,sum(dlen) as recvlen,sum(dnum)  as recvnum from tcp_stream group by sip;

 23.925

83598

源ip进行分组,统计源ip的发包大小,发包数,收包大小,收包数

create table dstip as select dip as ip,sum(dlen) as sendlen,sum(dnum) as sendnum,sum(slen) as recvlen,sum(snum) as recvnum from tcp_stream group by dip;

22.652

46263

目的ip进行分组,统计目的ip的发包大小,发包数,收包大小,收包数

create table test_ip as select ip,sum(sendlen) as sendlen,sum(sendnum) as sendnum,sum(recvlen) as recvlen,sum(recvnum) as recvnum from ( select ip,sendlen,sendnum,recvlen,recvnum from srcip union select ip,sendlen,sendnum,recvlen,recvnum from dstip)tmp group by ip;

23.772

125772

子查询首先合并srcip表和dstip表,存储在tmp中,然后以ip进行分组,统计所有ip的发包大小,发包数,收包大小,收包数

insert overwrite local directory '/home/libi/result' row format delimited fields terminated by '\t' select * from test_ip;

13.386

125772

将test_ip表的数据导出到本地目录

Select  *  from  test_ip;

0.062

125772

查询test_ip表

 

Hive表结构

Tcp_stream表结构,共6

序号

字段名

字段类型

备注(一个流中)

1

sip

bigint

ip,以整形形式存储

2

slen

int

ip发送的累计字节数

3

snum

int

ip发送的累计包数

4

dip

bigint

目的ip,以整形存储

5

dlen

int

目的ip接收的累计字节数

6

dnum

int

目的ip接收的累计包数

 

Srcip,dstip,test_ip表结构

序号

字段名

字段类型

备注

1

ip

bigint

IP

2

sendlen

bigint

发送的字节数

3

sendnum

bigint

发送的包数

4

recvlen

bigint

接收的字节数

5

recvnum

bigint

接收的包数

 

hive命令

数据存储位置:/home/huangcaiyun/result.txt,该文件格式是用’\t’分隔,共6,总共638415行。统计结果文件存储在/home/libi/ip_test/result.txt中,该文件格式是用’\t’分隔总共125772行。

 

Ø xshell登录服务器10.0.6.80,用户名root,密码111111

Ø cd  /home/hadoop_hive/hadoop-2.7.2/sbin

Ø ./start-all.sh    进入hadoop目录,启动所有进程

Ø cd  /home/libi  进入用户目录,使用hive

Ø Hive   进入hive

Ø create table tcp_stream(sip bigint,slen int,snum int,dip bigint, dlen int,dnum int)

Ø ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;

Ø load data local inpath '/home/huangcaiyun/result.txt' into table tcp_stream;

Ø dfs -ls /user/hive/warehouse/tcp_stream;

Ø show database 默认数据库default

Ø use default

Ø show tables

Ø Create table srcip as select sip as ip,sum(slen) as sendlen,sum(snum) as sendnum,sum(dlen) as recvlen,sum(dnum) as recvnum from tcp_stream group by sip;  从表tcp_stream导入数据,建立表srcip;

Ø Create table dstip as select dip as ip,sum(dlen) as sendlen,sum(dnum) as sendnum,sum(slen) as recvlen,sum(snum) as recvnum from tcp_stream group by dip;  从表tcp_stream导入数据,建立表dstip;

Ø Describe dstip;  查看表结构

Ø create table test_ip as select ip,sum(sendlen),sum(sendnum),sum(recvlen),sum(recvnum) from ( select ip,sendlen,sendnum,recvlen,recvnum from srcip union select ip,sendlen,sendnum,recvlen,recvnum from dstip)tmp group by ip;  

   建立源ip,目的ip的汇总表,当ip字段相同时,对应字段相加

Ø insert overwrite local directory '/home/libi/result' row format delimited fields terminated by '\t' select * from test_ip;  

   导出表test_ip的信息到本地目录/home/libi/ip_test/ ;

Mahout时间统计

Mahout原始数据说明

进行分类的原始数据格式为:IP地址、发送字节数、发送包数、接收字节数、接收包数 

聚类过程使用k-means的原因:

  首先,k-means算法能根据较少的已知聚类样本的类别对树进行剪枝确定部分样本的分类 其次,k-means为克服少量样本聚类的不准确性,该算法本身具有优化迭代功能,在已经求得的聚类上再次进行迭代修正剪枝确定部分样本的聚类,优化了初始监督学习样本分类不合理的地方

 

 

命令

时间

(分钟)

数据大小

(行数)

功能

理由

bin/mahout org.apache.mahout.clustering.syntheticcontrol.kmeans.Job

 

4.8966

125772

以行为单位,即ip,发包大小,发包数,收包大小,收包数,使用k-means算法聚类,得到相似的ip

因为某一个用户可能会经常修改IP地址来达到避免监控,规避风险的目的,但是虽然IP地址改了,但是其流量规模应该类似

Mahout命令

Hadoop fs -cmd  等价于 hdfs dfs -cmd

访问hdfs文件系统

Ø xshell登录服务器10.0.6.80,用户名root,密码111111

Ø cd  /home/hadoop_hive/hadoop-2.7.2/sbin

Ø ./start-all.sh    进入hadoop目录,启动所有进程

Ø cd  /home/hadoop_hive/hadoop-2.7.2

Ø bin/hdfs dfs -mkdir -p /user/root

Ø bin/hdfs dfs -mkdir -p /user/root/testdata

hdfs 上创建/user/root路径以及/user/root/testdata文件夹(注意,mahout默认输入路径为/user/root/testdata,但是hdfs系统没有/user/root路径,所以需要自行创建root文件夹)

Ø bin/hdfs dfs -put /home/libi/ip_test/ip.txt /user/root/testdata

bin/hadoop dfs -put /home/libi/ip_test/ip.txt /user/root/testdata

将数据上传到mahout默认目录

Ø Hadoop -fs -lsr /user/root/testdata

查看hdfs文件目录/user/root/testdata  hdfs dfs -lsr /user/root/testdata

Ø Cd /home/mahout

Ø bin/mahout org.apache.mahout.clustering.syntheticcontrol.kmeans.Job

使用k-means算法进行聚类

Ø cd  /home/hadoop_hive/hadoop-2.7.2

Ø bin/hadoop fs lrs /user/root/output

hadoop路径下,可以看到一共进行了10次聚类,文件夹clusteredPoints文件夹存放的是最终结果,里面记录了每个向量及其对应所分的类,clusters-N记录第N次迭代后每个类的中心点,data是原始数据的sequence file格式文件。

Ø Cd /home/mahout

Ø  mahout seqdumper i /user/root/ouput/clusteredPoints

mahout路径下,查看聚类结果clusteredPoints

 

附录

参考文档:

https://chu888chu888.gitbooks.io/hadoopstudy/content/Content/4/chapter0402.html

Hadoop安装前配置

修改hostname

vi /etc/sysconfig/hostname

hostname=hyXX

 

   使hostname生效

hostname hyXX

[root@hy83 home]# hostname hy81

修改hosts

vi /etc/hosts 808183

10.0.6.80    hy80

10.0.6.81    hy81

10.0.6.83    hy83

时间同步

ntpdate hy838081

    83为配置的ntp服务器

参考文档:http://www.aboutyun.com/thread-11397-1-2.html

安装JDK

集群所有的机器都需要执行此操作

1.1下载jdk压缩包,系统中我们是jdk1.8.0_91

1.2 tar -xvfz jdk-8u91-linux-x64.tar.gz

1.3更新环境变量

Vim  /etc/profile

export JAVA_HOME=/home/zhangpeng/jdk1.8.0_91

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=${JAVA_HOME}/bin:$PATH

 

source /etc/profile  //使配置文件生效

 

java –version 查看Java版本就表明安装成功了

配置masterslaveSSH免密钥登录

默认SSH服务均已安装

mater机器上

cd ~/.ssh/

生成公钥和私钥

ssh-keygen -t rsa -P ""

将公钥追加到文件

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

然后在master上将id_rsa.pub拷贝到slave/home/目录下

scp  ~/.ssh/id_rsa.pub root@slave1:/home

slave机器上执行

cat /home/id_rsa.pub >> ~/.ssh/authorized_keys

Hadoop的安装

先在master机器上装好hadoop后,通过sftp或者scp直接拷贝到slave

在每台机器上mkdir /home/hadoop_home/tmp用作hadoop-tmp-dir

2.1下载hadoop安装包,此处是hadoop-2.7.2.tar.gz

2.2tar -xvfz hadoop-2.7.2.tar.gz

2.3更新环境变量

Vim  /etc/profile

export HADOOP_HOME=/home/hadoop_hive/hadoop-2.7.2

export PATH=$PATH:$HADOOP_HOME/bin

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

 

2.4更新hadoop-env.sh

Cd/home/hadoop_hive/hadoop-2.7.2/etc/hadoop  //以下的文件都在此当前文件下

Vim hadoop-env.sh

export JAVA_HOME=/home/zhangpeng/jdk1.8.0_91

//加入java的安装路径

 

2.5配置slavescore-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xml 

2.5.1文件slaves

cd /home/hadoop_hive/hadoop-2.7.2/etc/hadoop/

sudo vim slaves

hy80

hy81

hy83

 

2.5.2文件 core-site.xml 改为下面的配置

<configuration>

    <property>

        <name>fs.defaultFS</name>

        <value>hdfs://hy80:9000</value>

    </property>

    <property>

        <name>hadoop.tmp.dir</name>

        <value>/home/hadoop_hive/tmp</value>

    </property>

</configuration>

 

2.5.3文件 hdfs-site.xml

<configuration>

    <property>

        <name>dfs.namenode.secondary.http-address</name>

        <value>hy80:50090</value>

    </property>

    <property>

        <name>dfs.replication</name>

        <value>1</value>

    </property>

    <property>

        <name>dfs.namenode.name.dir</name>

        <value>file:/home/hadoop_hive/tmp dfs/name</value>

    </property>

    <property>

        <name>dfs.datanode.data.dir</name>

        <value>file:/home/hadoop_hive/tmp/dfs/data</value>

    </property>

</configuration>

 

2.5.4文件 mapred-site.xml (可能需要先重命名,默认文件名为 mapred-site.xml.template),然后配置修改如下

<configuration>

    <property>

        <name>mapreduce.framework.name</name>

        <value>yarn</value>

    </property>

    <property>

        <name>mapreduce.jobhistory.address</name>

        <value>hy80:10020</value>

    </property>

    <property>

        <name>mapreduce.jobhistory.webapp.address</name>

        <value>hy80:19888</value>

    </property>

</configuration>

2.5.5文件 yarn-site.xml

<configuration>

    <property>

        <name>yarn.resourcemanager.hostname</name>

        <value>hy80</value>

    </property>

    <property>

        <name>yarn.nodemanager.aux-services</name>

        <value>mapreduce_shuffle</value>

    </property>

</configuration>

 

 

2.7将配置好的hadoop文件copy到另一台slave机器上

scp -r hadoop-2.7.2/root@10.0.6.83:/home/hadoop_hive

 

2.8master节点(hy80)格式化namenode:

cd  /home/hadoop_hive /hadoop-2.6.0/

 ./bin/hdfs namenode –format

2.9、启动hdfs,yarn:

cd  /home/hadoop_hive /hadoop-2.6.0/

./sbin/start-all.sh

查看集群状态

./bin/hdfs dfsadmin –report

查看hdfshttp://10.0.6.80:50070/

查看RMhttp://10.0.6.80:8088/

 

HIVE安装jdk,mysql,hadoop已安装完成)

参考文档:https://chu888chu888.gitbooks.io/hadoopstudy/content/Content/8/chapter0807.html

HIVEmysql装在master机器上

 

1.安装mysql(默认已经安装)

2.创建hive meta数据库 赋予权限

mysql –u root

mysql>create user ‘hive’@’localhost’ identified by ’hive’;

mysql>grant all privileges on *.* to hive@"%" identified by "hive" with grant option;

mysql>flush privileges;

3.测试

mysql –uhive –phive –hamster

mysql>exit;

4. 添加hive环境变量

export HIVE_HOME=/home/hadoop_hive/apache-hive-2.1.0-bin

export PATH=$PATH:$HIVE_HOME/bin

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:${HIVE_HOME}/lib

5. 修改$(HIVE_HOME)/conf下的几个template模板并重命名为其他

 

配置hive-env.sh文件,指定HADOOP_HOME

HADOOP_HOME=/usr/local/hadoop

 

修改hive-site.xml文件,指定MySQL数据库驱动、数据库名、用户名及密码,修改的内容如下所示

 

<property>

<name>javax.jdo.option.ConnectionURL</name>

 <value>jdbc:mysql://hy80:3306/hive?createDatabaseIfNotExist=true</value>

</property>

 

<property>

<name>javax.jdo.option.ConnectionDriverName</name>

 <value>com.mysql.jdbc.Driver</value>

</property>

 

<property>

<name>javax.jdo.option.ConnectionUserName</name>

 <value>hive</value>

</property>

 

 

<property>

<name>javax.jdo.option.ConnectionPassword</name>

 <value>hive</value>

</property>

 

<property>   

<name>hive.exec.local.scratchdir</name>  

<value>/home/hadoop_hive/tmp</value>  

<description>Local scratch space for Hive jobs</description>  

</property>  

<property>

  <name>hive.downloaded.resources.dir</name>  <value>/home/hadoop_hive/tmp</value>

 <description>Temporary local directory for added resources in the remote file system.</description>  

</property>

 

修改hive/bin下的hive-config.sh文件,设置JAVA_HOME,HADOOP_HOME

 

export JAVA_HOME=/home/zhangpeng/jdk1.8.0_91

export HADOOP_HOME=/home/hadoop_hive/hadoop-2.7.2

export HIVE_HOME=/home/hadoop_hive/apache-hive-2.1.0-bin

 

下载mysql-connector-java-5.1.27-bin.jar文件,并放到$HIVE_HOME/lib目录下可以从Mysql的官方网站下载,但是记得一定要解压呀,下载的是一个tar.gz文件

初始化meta数据库

入之前需要初始化

schematool -initSchema -dbType mysql

 

测试hive shell

hive show databases;

show tables;

HIVE额外命令

hive不支持用insert语句一条一条的进行插入操作,也不支持update操作。数据是以load的方式加载到建立好的表中。数据一旦导入就不可以修改。

insert into table srcip select * from dstip;

alter table dst_ip change column dip ip string;

insert overwrite table src_ip select * from dst_ip;

from test_table                     
insert overwrite table test_insert1 
select key
insert overwrite table test_insert2
select value;
对多个表进行插入操作:insert的时候,from子句即可以放在select子句后面,也可以放在 insert子句前面。

mahout安装

1.1下载压缩包,下载路径为http://mirror.bit.edu.cn/apache/mahout/0.12.2/

下载版本为apache-mahout-distribution-0.12.2.tar.gz,存储路径为/home/mahout/apache-mahout-distribution-0.12.2。注意,mahout只需要Hadoop集群的NameNode节点上安装一个即可,其他数据节点上不需要安装。

 

1.2解压缩文件到当前路径

1.3配置环境变量:vim /etc/profile

export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop

export MAHOUT_HOME=/opt/mahout-distribution-0.9

export MAHOUT_CONF_DIR=${MAHOUT_HOME}/conf

export MAHOUT_LOCAL=

export PATH=${PATH}:${MAHOUT_HOME}/conf:${MAHOUT_HOME}/bin

export CLASSPASS=${CLASSPATH}:${MAHOUT_HOME}lib

1.4执行source/etc/profile命令,使环境变量立即生效

1.5执行命令bin/mahout。若列出一些算法,则成功,如图:

 

Mahout测试

2.1启动hadoop

hadoop路径下的sbin文件夹下执行./start-all.sh命令,启动hadoop

2.2下载测试用例

Synthetic_control.data数据集下载地址
http://archive.ics.uci.edu/ml/databases/synthetic_control/synthetic_control.data存储地址为/home/data/syntheticcontrol.data

2.3使用命令bin/hdfs dfs -mkdir -p /user/root和bin/hdfs dfs -mkdir -p /user/root/testdata在hdfs 上创建/user/root路径以及/user/root/testdata文件夹(注意,mahout默认输入路径为/user/root/testdata,但是hdfs系统没有/user/root路径,所以需要自行创建root文件夹)

2.4将测试数据上传到hdfs系统中。

bin/hdfs dfs -put /home/data/synthetic_control.data /user/root/testdata

2.5进入到mahout路径下,使用下面命令使用kmeans算法进行聚类测试。

bin/mahout org.apache.mahout.clustering.syntheticcontrol.kmeans.Job

2.6查看聚类结果。

运行结束后显示的结果如下所示:

在hadoop路径下输入指令:

bin/hadoop fslrs /user/root/output,列出hdfs系统中/user/root/output路径下的输出结果如下图所示。可以看到一共进行了10次聚类,文件夹clusteredPoints文件夹存放的是最终结果,里面记录了每个向量及其对应所分的类,clusters-N记录第N次迭代后每个类的中心点,data是原始数据的sequence file格式文件。

 

2.7在mahout存储路径下输入 mahoutseqdumper i/user/root/ouput/clusteredPoints命令,查看clusteredPoints中的最终结果如下图所示。

 

 

clusteredPoints将按照原始数据样本的顺序,展示每个样本分别属于哪个类别,其中key后面的值是类别编号,value后面的值是数据点。

 

Mahout聚类

1. 删除测试数据

进入Hadoop目录,使用命令bin/hdfs dfsrm /user/root/testdata/ synthetic_control.data

2 将数据上传到hdfs系统中。

bin/hdfs dfs -put /home/libi/ip_test/ip.txt /user/root/testdata

3 进入到mahout路径下,使用下面命令使用kmeans算法进行聚类测试。

bin/mahout org.apache.mahout.clustering.syntheticcontrol.kmeans.Job

程序共运行了4.8966分钟,如下图所示:

 

4 查看聚类结果。

运行结束后屏幕显示的结果如下所示:

 

在hadoop路径下输入指令:

bin/hadoop fslrs /user/root/output,列出hdfs系统中/user/root/output路径下的输出结果如下图所示。可以看到一共进行了10次聚类,文件夹clusteredPoints文件夹存放的是最终结果,里面记录了每个向量及其对应所分的类,clusters-N记录第N次迭代后每个类的中心点,data是原始数据的sequence file格式文件。

 

5 在mahout存储路径下输入 mahoutseqdumper i/user/root/ouput/clusteredPoints命令,查看clusteredPoints中的最终结果如下图所示。

 

其中Key后面的值是该数据对应的聚类中心的编号,对应在源文件的哪一行,wt表示权重,distance表示到中心距离,vec中第一组数值表示ip地址,第二组数值表示该ip地址收发的字节数,第三组数值表示收发的包数。数据前的“0”,“1”,“2”等标号表示该组数值在原数据中的列数。经过统计,K值一共有6个,编号分别为20356 30968 42375 72244 93988 118705,其对应数据为:

987343137 0 0 7668 7

1094142577 0 0 86713 124

1744573060 0 0 1812 4

2043495260 0 0 6 2

3029971136 0 0 457 1

3702552199 0 0 3081600 2140

 

使用下列命令可以将每一类的点列出来

mahout clusterdump –i /user/root/output/clusters-10-final –p /user/root/output/clusteredPoints –o /home/data/final.txt

其中n为某类的样本数目,c为各类各属性的中心,r为各类属性的半径。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值