大数据环境搭建及基本使用

目录

大数据环境搭建及基本使用

环境搭建:Ubuntu18.04三台虚拟机大数据

1.Hadoop hdfs使用

2.Hadoop mapreduce使用

3.Hive使用

4.Hbase使用

5.Kafka使用


大数据环境搭建及基本使用

环境搭建:Ubuntu18.04三台虚拟机大数据

记录一下自己搭建三台虚拟机的过程

环境总体概述

主节点

IP地址

软件

进程

master

192.168.190.130

MySQL 5.7.29

namenode(hadoop)

  

JDK 1.8.0_241

resourcemanager(yarn)

  

Hadoop 2.10.1

QuorumPeerMain(zookeeper)

  

Zookeeper 3.5.7

HMaster,HRegionServer(hbase)

  

Hbase 2.2.4

Master(spark)

  

Spark 2.4.5

 
  

Hive 2.3.7

 
  

Sqoop 1.4.7

 
  

Kafka 2.1.0 2.11

 

slave1

192.168.190.131

JDK 1.8.0_241

datanode(hadoop)

  

Hadoop 2.10.1

nodemanager(yarn)

  

Zookeeper 3.5.7

QuorumPeerMain(zookeeper)

  

Hbase 2.2.4

HRegionServer(hbase)

  

Spark 2.4.5

Worker(spark)

slave2

192.168.190.132

JDK 1.8.0_241

datanodesecondarynamenode(hadoop)

  

Hadoop 2.10.1

nodemanager(yarn)

  

Zookeeper 3.5.7

QuorumPeerMain(zookeeper)

  

Hbase 2.2.4

HRegionServer(hbase)

  

Spark 2.4.5

Worker(spark)

 

虚拟机配置

  1. 首先配置主节点master虚拟机
    1. 下载vmware(略)
    2. 下载ubuntu镜像(略)
    3. Vmware启动ubutu18.04镜像

配置:存储为单个文件、内存4G、cpu2*2、硬盘50G、网络自定义NAT模式vmnet8(根基自己电脑配置酌情,比如我的电脑16G内存,分给master 4G,slave1和slave2分别2G)配置截图如下图

    1. 网络配置
    2. 编辑-虚拟网络编辑器-更改设置-选择vmnet8,将子网IP设成三台机器所在网段

    1. 选择NAT设置-修改网关

    1. 选择DHCP设置-修改

    1. 开启虚拟机,进入终端(ctrl+alt+t)
    2. 设置静态IP地址:(此处为ubuntu18.04中,ubuntu16.04不适用)

vim /etc/netplan/01-network-manager-all.yaml(文件名有可能不是这个,去你自己机器找)

network:

# dxy add

  ethernets:

    ens33:  # 网卡名根据自己电脑来。ifconfig查看自己的网卡名。没有命令使用sudo apt install net-tools安装一下

      addresses:

      - 192.168.190.130/24   # 静态地址

      gateway4: 192.168.190.2   #网关

      nameservers:

        addresses:

        - 8.8.8.8

        search: []

      optional: true

#dxy add end

  version: 2

  renderer: NetworkManager

使得配置生效

sudo netplan apply 

查看是否修改成功

ifconfig

配置集群中其他机器地址及域名:

sudo vim /etc/hosts

127.0.0.1       localhost

127.0.1.1 localhost.localdomain localhost

192.168.190.130 master

192.168.190.131 slave1

192.168.190.132 slave2

配置本机名

vim /etc/hostname

master

重启

 

  1. 在Linux上安装Hadoop之前,需要安装两个程序:

1)JDK 1.8。Hadoop是Java编写的程序,Hadoop的编译及MapReduce都需要使用JDK。因此,在安装Hadoop前,必须安装JDK。

2)SSH(安装外壳协议),推荐安装OpenSSH.Hadoop需要通过SSH来启动Slave列表中各台机器的守护进程,因此SSH也是必须安装的,即使是安装伪分布版本(因为Hadoop并没有区分集群式和伪分布式)。对于伪分布式,Hadoop会采用与集群相同处理方式,即按次序启动文件conf/slaves中记载的主机上的进程,只不过在伪分布式中Slave为localhost(即本身),所以对于伪分布式Hadoop,SSH也是一样必须的。

  1. 关闭防火墙

查看防火墙状态

sudo ufw status

未安装ufw的话

sudo apt-get install ufw

返回:stats:inactive表示已经关闭

若未关闭,关闭防火墙

sudo ufw disable

 

  1. Jdk安装

目前在官网下载jdk1.8的jdk和mysql包的时候需要登陆,借用别人账号

账号:  13707259624@163.com

密码:Java123456

 

解压压缩包

tar -zxvf jdk-8u144-linux-x64.tar.gz -C /home/hadoop/bigdata/

设置软连接

ln -s jdk-xxxx jdk

配置环境变量

vim ~/.bashrc

export JAVA_HOME=/home/hadoop/bigdata/jdk

export PATH=$JAVA_HOME/bin:$PATH

使得环境变量生效

source ~/.bashrc

查看是否成功

Java -version

  1. ssh安装

sudo apt-get install openssh-server

  1. 到这里基本配置完成,克隆出两个虚拟机,命名为slave1、slave2

设置开机后设置静态IP地址:

vim /etc/netplan/01-network-manager-all.yaml

slave1为192.168.190.131/24

slave2为192.168.190.131/24

生效

sudo netplan apply

配置本机名

vim /etc/hostname

slave1 # 在slave1虚拟机中添加

 

slave2 #在slave2虚拟机中添加

 

重启

此时三者应该可以互相ping通

在master下尝试 ping slave1、ping slave2

在slave1下尝试 ping master、ping slave2

在slave2下尝试 ping master、ping slave1

如有ping不通查看防火墙是否关闭,配置文件是否没修改好

 

  1. 使得三者能ssh通讯

在三台机器上分别使用命令

ssh localhost

输入密码登录后

exit

这样三台机器上都增加了~/.ssh文件

cd ~/.ssh

在三台机器上分别执行下句生成本机公钥

ssh-keygen -t rsa -P ‘’

ls可以看到id_rsa和id_rsa.pub

在三台机器上分别执行,将公钥添加到认证公钥文件中

cat id_rsa.pub >> authorized_keys

 

使得master可以ssh免密登录slave1,slave2

在master机器上,复制了一份自己公钥命名为tmp

cp authorized_keys tmp

 

在master机器上将自己的公钥发送给slave1、slave2

scp tmp hadoop@slave1:/home/hadoop/.ssh/

scp tmp hadoop@slave2:/home/hadoop/.ssh/

 

在slave1,slave2将master公钥添加进其中

cat tmp >> authorized_keys

 

验证

在master是否可以免密远程登录

ssh slave1

ssh slave2

 

Hadoop安装

先在master节点安装hadoop,然后发给slave1、slave2

下载jdk 和 hadoop 解压放到 ~/bigdata目录下

tar -zxvf hadoop-xxx.tar.gz -C ~/bigdata/

创建软连接

ln -s hadoop-xxx hadoop

 

配置环境变量

vim ~/.bashrc

export HADOOP_HOME=/home/hadoop/bigdata/hadoop

export PATH=$HADOOP_HOME/bin:$PATH

#保存退出后

source ~/.bash_profile

进入到解压后的hadoop目录 修改配置文件

配置文件作用

  • core-site.xml 指定hdfs的访问方式
  • hdfs-site.xml 指定namenode datanode 的数据存储位置
  • mapred-site.xml 配置mapreduce
  • yarn-site.xml 配置yarn

修改hadoop-env.sh

cd etc/hadoop

vim hadoop-env.sh

#找到下面内容添加java home

export_JAVA_HOME=/home/hadoop/bigdata/jdk

修改 core-site.xml 在 <configuration>节点中添加

<configuration>

    <!-- 指定Hadoop运行时产生文件的存储目录 -->

    <property>

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

        <value>/home/hadoop/bigdata/hadoop/data/tmp</value>

        <description>Abase for other temporary directories.</description>

    </property>

    <!-- 指定HDFSNameNode的地址 -->

    <property>

        <name>fs.defaultFS</name>

        <value>hdfs://master:9000</value>

    </property>

</configuration>

修改hdfs-site.xml

<configuration>

    <property>

        <name>dfs.replication</name>

        <value>2</value>

    </property>

    <!-- 指定Hadoop辅助名称节点主机配置 -->

    <property>

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

        <value>slave2:50090</value>

    </property>

</configuration>

修改 mapred-site.xml

默认没有这个从模板文件复制

<configuration>

        <property>

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

                <value>yarn</value>

        </property>

</configuration>

修改yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->

        <!-- Reducer获取数据的方式 -->

        <property>

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

                <value>mapreduce_shuffle</value>

        </property>

 

        <!-- 指定YARNResourceManager的地址 -->

        <property>

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

                <value>master</value>

        </property>

</configuration>

指定datanode节点

slave1

slave2

 

查看hadoop是否安装成功

hadoop version

发送给slave1slave2

scp -r /home/hadoop/bigdata/hadoop-xxx hadoop@slave1:/home/hadoop/bigdata/

scp -r /home/hadoop/bigdata/hadoop-xxx hadoop@slave2:/home/hadoop/bigdata/

slave1,slave2分别创建软连接

ln -s hadoop-xxx hadoop

 

来到hadoopbin目录,格式化namenode

hdfs namenode -format

启动hadoop

来到hadoopsbin目录

start-all.sh

查看进程

Slave1

Slave2

Zookeeper安装

先在master安装,再发送到slave1,slave2

下载Zookeeper的安装包并解压

tar -zxvf zookeeper-3.5.7-bin.tar.gz -C ~/bigdata/

创建软连接

ln -s zookeeper-xxx zookeeper

 

配置环境变量

# zookeeper

export ZOOKEEPER_HOME=/home/hadoop/bigdata/zookeeper

export PATH=$ZOOKEEPER_HOME/bin:$PATH

进入到conf目录下

# 心跳间隔

tickTime=2000

# 初始容忍心跳数

initLimit=10

# 等待最大容忍心跳数

syncLimit=5

# 本地保存数据的目录

dataDir=/home/hadoop/bigdata/zookeeper/zookeeperdir/zookeeper-data

# 日志存放位置

dataLogDir=/home/hadoop/bigdata/zookeeper/zookeeperdir/logs

# 客户端默认端口

clientPort=2181

 

# dxy add 2888端口号是zookeeper服务之间通信的端口(心跳端口),而3888zookeeper与其他应用程序通信的端口(数据端口)

server.1=master:2888:3888

server.2=slave1:2888:3888

server.3=slave2:2888:3888

创建目录

mkdir -p /home/hadoop/bigdata/zookeeper/zookeeperdir/logs

mkdir -p /home/hadoop/bigdata/zookeeper/zookeeperdir/zookeeper-data

 

zookeeper-data目录下 新建 myid 文件

vim myid

添加1

发送给slave1slave2

scp -r /home/hadoop/bigdata/zookeeper-xxx hadoop@slave1:/home/hadoop/bigdata/

scp -r /home/hadoop/bigdata/zookeeper-xxx hadoop@slave2:/home/hadoop/bigdata/

 

slave1,slave2分别创建软连接

ln -s zookeeper-xxx zookeeper

slave1,slave2修改myid

vim myid  # slave12

vim myid  # slave2 3

在master、slave1、slave2分别启动(若只启动master ./zkServer.sh status会报错

启动Zookeeper、查看状态、关闭

./zkServer.sh start

./zkServer.sh status

./zkServer.sh stop

编写启动脚本可参考下面链接。后面会配置大数据集群脚本,这步可以先不做。

https://www.cnblogs.com/biehongli/p/7650570.html

Hbase安装

Hbase 安装前需要安装好 JDK HadoopZookeeper。配置好环境变量。

先在master安装然后配置,再发送给slave1slave2

下载Hbase的安装包并解压

tar -zxvf hbase-2.2.4.tar.gz  -C ~/bigdata/

环境变量配置

vim ~/.bashrc

export HBASE_HOME=/root/bigdata/hbase

export PATH=$HBASE_HOME/bin:$PATH

source ~/.bashrc

配置hbase-env.sh

export JAVA_HOME=/root/bigdata/jdk

export HBASE_MANAGES_ZK=false  --如果你是使用hbase自带的zk就是true,如果使用自己的zk就是false

配置hbase-site.xml

<configuration>

//本台机器hbase存储目录

<property>

        <name>hbase.rootdir</name>

        <value>hdfs://master:9000/hbase</value>

</property>

//hbasemaster位置

<property>

        <name>hbase.master</name>

        <value>master:60000</value>

</property>

//hbase的运行模式,true代表分布式,false为单机模式

<property>

        <name>hbase.cluster.distributed</name>

        <value>true</value>

</property>

//zookeeper监控目录

<property>

        <name>hbase.zookeeper.quorum</name>

        <value>master,slave1,slave2</value>

</property>

<property>

        <name>hbase.tmp.dir</name>

        <value>/home/hadoop/bigdata/hbase/data</value>

        <description>Temporary directory on the local filesystem.</description>

</property>

//Here you have to set the path where you want HBase to store its built

in zookeeper files.

<property>

        <name>hbase.zookeeper.property.dataDir</name>

        <value>/home/hadoop/bigdata/zookeeper/zookeeperdir/zookeeper-data</value>

</property>

<property>

        <name>hbase.unsafe.stream.capability.enforce</name>

        <value>false</value>

</property>

</configuration>

配置regionservers

master

slave1

slave2

发送给slave1,slave2

scp -r /home/hadoop/bigdata/hbase-xxx hadoop@slave1:/home/hadoop/bigdata/

scp -r /home/hadoop/bigdata/hbase-xxx hadoop@slave2:/home/hadoop/bigdata/

slave1,slave2分别创建软连接

ln -s hbase-xxx hbase

 

启动hbase(启动的hbase的时候要保证hadoop集群已经启动)

/hbase/bin/start-hbase.sh

hbase shell

 

Spark安装

先在master安装,再发送到slave1,slave2

下载spark的安装包并解压

tar -zxvf spark-xxxx.tar.gz -C ~/bigdata/

创建软连接

ln -s spark-xxx spark

环境变量配置

vim ~/.bashrc

export SPARK_HOME=/root/bigdata/spark

export PATH=$SPARK_HOME /bin:$PATH

source ~/.bashrc

修改spark-env.sh

cp spark-env.sh.template

export HADOOP_HOME=/home/hadoop/bigdata/hadoop

export YARN_HOME=/home/hadoop/bigdata/hadoop

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export YARN_CONF_DIR=$YARN_HOME/etc/hadoop

export SPARK_HOME=/home/hadoop/bigdata/spark

export JAVA_HOME=/opt/java/jdk1.8.0_241

# 配置master的地址

export SPARK_MASTER_IP=192.168.190.130

export SPARK_LIBRARY_PATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$HADOOP_HOME/lib/native

SPARK_LOCAL_DIRS=/home/hadoop/bigdata/spark/tmp

SPARK_DRIVER_MEMORY=2G

集群配置,修改slaves

cp slaves.template slaves

# A Spark Worker will be started on each of the machines listed below.

slave1

slave2

发送给slave1,slave2

scp -r /home/hadoop/bigdata/spark-xxx hadoop@slave1:/home/hadoop/bigdata/

scp -r /home/hadoop/bigdata/spark-xxx hadoop@slave2:/home/hadoop/bigdata/

slave1,slave2分别创建软连接

ln -s spark-xxx hbase

 

编写集群一键启动脚本

此时集群hadoop+zookeeper+hbase+spark集群基本搭建完毕。

想要启动集群首先要在master上启动hdfs和yarn。在master、slave1、slave2上启动zookeeper、在master上启动hbase、在master上启动hbase。每次启动是很麻烦的一件事,所以我们编写一个一键启动脚本。

在master机器上,编写集群启动脚本

mkdir ~/script

vim start.sh

 

# hadoop集群启动

/home/hadoop/bigdata/hadoop/sbin/start-yarn.sh

/home/hadoop/bigdata/hadoop/sbin/start-dfs.sh

# zookeeper集群启动

/home/hadoop/bigdata/zookeeper/bin/zkServer.sh start

for i in 1 2

do

ssh slave$i "source ~/.bashrc;/home/hadoop/bigdata/zookeeper/bin/zkServer.sh start"

done

# hbase集群启动

start-hbase.sh

# spark集群启动

/home/hadoop/bigdata/spark/sbin/start-all.sh

编写集群关闭脚本

vim stop.sh

 

# spark集群关闭

/home/hadoop/bigdata/spark/sbin/stop-all.sh

# hbase集群关闭

stop-hbase.sh

# zookeeper集群关闭

/home/hadoop/bigdata/zookeeper/bin/zkServer.sh stop

for i in 1 2

do

ssh slave$i "/home/hadoop/bigdata/zookeeper/bin/zkServer.sh stop"

done

# hadoop集群关闭

/home/hadoop/bigdata/hadoop/sbin/stop-dfs.sh

/home/hadoop/bigdata/hadoop/sbin/stop-yarn.sh

为了在任何位置上都可以使用集群启动关闭脚本,将脚本所在路径配置到环境变量

vim ~/.bashrc

 

#自动化脚本的目录

export SCRIPT=/home/hadoop/script

export PATH=$SCRIPT:$PATH

 

source ~/.bashrc

尝试使用该命令

start.sh

stop.sh

 

Hive安装

Hive 安装前需要安装好 JDK Hadoop。配置好环境变量。

只在master安装即可

下载Hive的安装包并解压

tar -zxvf hive-2.3.7.tar.gz  -C ~/bigdata/

进入到 解压后的hive目录找到 conf目录, 修改配置文件

cp hive-env.sh.template hive-env.sh

vi hive-env.sh

hive-env.sh中指定hadoop的路径

HADOOP_HOME=/home/hadoop/bigdata/hadoop

配置环境变量

vim ~/.bashrc

# hive

export HIVE_HOME=/home/hadoop/bigdata/hive

export PATH=$HIVE_HOME/bin:$PATH

#保存退出后

source ~/.bash_profile

mysql连接

上传 mysql驱动到 hive安装目录的lib目录下

cp mysql-connector-java-8.0.19.jar /home/hadoop/bigdata/hive/lib/

vi conf/hive-site.xml 配置 Mysql 元数据库信息

<configuration>

    <!-- Hive产生的元数据存放位置-->

    <property>

        <name>hive.metastore.warehouse.dir</name>

        <value>/user/hive/warehouse</value>

    </property>

    <!--- 使用本地服务连接Hive,默认为true-->

    <property>

        <name>hive.metastore.local</name>

        <value>true</value>

    </property>

    <!-- 数据库连接JDBCURL地址-->

    <property>

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

        <value>jdbc:mysql://localhost:3306/hive</value>

    </property>

    <!-- 数据库连接driver,即MySQL驱动-->

    <property>

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

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

    </property>

    <!-- MySQL数据库用户名-->

    <property>

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

        <value>hive</value>

    </property>

    <!-- MySQL数据库密码-->

    <property>

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

        <value>123</value>

     </property>

    <property>

        <name>hive.metastore.schema.verification</name>

        <value>false</value>

     </property>

    <property>

        <name>datanucleus.schema.autoCreateAll</name>

        <value>true</value>

     </property>

</configuration>

在本地mysql中创建hive数据库

启动 hivemetastore元数据服务和hive

hive --service metastore

hive

Sqoop安装

HADOOP MYSQL安装ok

sudo tar xzvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz

配置环境变量

# sqoop

export SQOOP_HOME=/home/hadoop/bigdata/sqoop

export PATH=$SQOOP_HOME/bin:$PATH

 

source ~/.bashrc

切换到conf目录,配置sqoop-env.sh

cd $SQOOP_HOME/conf

mv sqoop-env-template.sh sqoop-env.sh

vim sqoop-env.sh

export HADOOP_COMMON_HOME=/home/hadoop/bigdata/hadoop

export HADOOP_MAPRED_HOME=/home/hadoop/bigdata/hadoop

移动jdbcjar包到lib目录下

cp mysql-connector-java-8.0.19.jar-bin.jar /home/hadoop/bigdata/ sqoop/lib

查看版本号

sqoop-version

Kafka安装

前提安装zookeeper并启动

解压kafka

tar -zxvf kafka_2.11-1.0.0.tgz

创建日志存储目录

cd /home/hadoop/bigdata/kafka/

mkdir logs-1

修改kafka-server 的配置文件

vim config/server.properties

修改配置文件中21、31、36和60行

broker.id=1

listeners=PLAINTEXT://:9092

advertised.listeners=PLAINTEXT://host_ip:9092

log.dirs=/home/wzj/kafka/logs-1

1.Hadoop hdfs使用

hdfs是分布式存储工具,按块存储。

查看文件

hadoop fs -ls <args>

查看文件内容

hadoop fs -cat <src>

移动文件

hadoop fs -mv URI [URI …] <dest>

上传本地文件到hdfs

hadoop fs -put <localsrc> ... <dst>

下载hdfs文件到本地

hadoop fs -get <localsrc> ... <dst>

删除文件

hadoop fs -rm URI [URI …]

2.Hadoop mapreduce使用

Mapreduce是分布式计算的工具,因为有大量IO操作,速度慢适合离线操作

 

案例:Word Count 词频统计

test.py

hadoop spark

hadoop spark hdfs

mapreduce hadoop

mapper.py

import sys

for line in sys.stdin:

    line = line.strip()

    words = line.split()

    for word in words:

        print("%s %d"%(word,1))

reducer.py

import sys

current_word = None

current_count = 0

word = None

for line in sys.stdin:

    line = line.strip()

    word,count = line.split()

    try:

        count = int(count)

    except ValueError:

        continue

 

    if word == current_word:

        current_count += count

    else:

        if current_word:

            print("%s\t%d" % (current_word,current_count))

        current_word = word

        current_count = count

if current_word == word:

    print("%s\t%d" % (current_word,current_count))

运行

1)不使用hadoop,linux下测试脚本

$cat test.txt | python mapper.py|sort|python reducer.py

2)使用hadoop

vim ./streaming.sh添加。需要将test.txt文件上传到hdfs

STREAM_JAR_PATH="/home/hadoop/bigdata/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.10.0.jar" #指定JAR包位置

INPUT_FILE_PATH_1="/test.txt" #指定读取文件位置

OUTPUT_PATH="/output" #指定输出文件位置

 

hadoop fs -rm -r -skipTrash $OUTPUT_PATH

 

hadoop jar $STREAM_JAR_PATH -input $INPUT_FILE_PATH_1 -output $OUTPUT_PATH -mapper "python mapper.py" -reducer "python reducer.py" -file ./mapper.py -file ./reducer.py

3.Hive使用

1)基本使用方法

创建数据库

CREATE DATABASE test;

显示所有数据库

SHOW DATABASES;

创建表

CREATE TABLE student(classNo string, stuNo string, score int) row format delimited fields terminated by ',';

row format delimited fields terminated by ',' 指定了字段的分隔符为逗号,所以load数据的时候,load的文本也要为逗号,否则加载后为NULLhive只支持单个字符的分隔符,hive默认的分隔符是\001

 

将数据load到表中

在本地文件系统创建一个如下的文本文件:/home/hadoop/tmp/student.txt

C01,N0101,82

C01,N0102,59

C01,N0103,65

C02,N0201,81

C02,N0202,82

C02,N0203,79

C03,N0301,56

C03,N0302,92

C03,N0306,72

这个命令将student.txt文件复制到hivewarehouse目录中,这个目录由hive.metastore.warehouse.dir配置项设置,默认值为/user/hive/warehouseOverwrite选项将导致Hive事先删除student目录下所有的文件, 并将文件内容映射到表中。

load data local inpath '/home/hadoop/tmp/student.txt' overwrite into table student;

查询表中的数据

hive>select * from student;

分组查询group by和统计count

hive>select classNo,count(score) from student where score>=60 group by classNo;

显示表信息

hive>desc student;

删除表查看结果

hive>drop table student;

 

2)综合案例

需求:根据用户行为以及文章标签筛选出用户最感兴趣(阅读最多)的标签。

用户行为表user_actions

user_id article_id event_time

11,101,2018-12-01 06:01:10

22,102,2018-12-01 07:28:12

33,103,2018-12-01 07:50:14

11,104,2018-12-01 09:08:12

22,103,2018-12-01 13:37:12

33,102,2018-12-02 07:09:12

11,101,2018-12-02 18:42:12

35,105,2018-12-03 09:21:12

22,104,2018-12-03 16:42:12

77,103,2018-12-03 18:31:12

99,102,2018-12-04 00:04:12

33,101,2018-12-04 19:10:12

11,101,2018-12-05 09:07:12

35,102,2018-12-05 11:00:12

22,103,2018-12-05 12:11:12

77,104,2018-12-05 18:02:02

99,105,2018-12-05 20:09:11

文章数据articles

artical_id,artical_url,artical_keywords

101,http://www.itcast.cn/1.html,kw8|kw1

102,http://www.itcast.cn/2.html,kw6|kw3

103,http://www.itcast.cn/3.html,kw7

104,http://www.itcast.cn/4.html,kw5|kw1|kw4|kw9

105,http://www.itcast.cn/5.html,

数据上传hdfs

hadoop fs -mkdir /tmp/demo

hadoop fs -mkdir /tmp/demo/user_action

创建外部表

drop table if exists user_actions;

CREATE EXTERNAL TABLE user_actions(

    user_id STRING,

    article_id STRING,

    time_stamp STRING

)

ROW FORMAT delimited fields terminated by ','

LOCATION '/tmp/demo/user_action';

 

drop table if exists articles;

CREATE EXTERNAL TABLE articles(

    article_id STRING,

    url STRING,

    key_words array<STRING>

)

ROW FORMAT delimited fields terminated by ','

COLLECTION ITEMS terminated BY '|'

LOCATION '/tmp/demo/article_keywords';

/*

key_words array<STRING>  数组的数据类型

COLLECTION ITEMS terminated BY '|'  数组的元素之间用'|'分割

*/

查看数据

select * from user_actions;

select * from articles;

需要使用到的方法

  1. collect_set/collect_list

group by之后 针对某一列聚合 结果放到[]

区别一个去重一个不去重

  1. lateral view explode

explode函数把复杂类型array map拆开 一行变多行

lateral view 和 explode函数 配合使用 创建虚拟视图 可以把 explode的结果和其他列一起查询

select article_id,kw from articles lateral view explode(key_words) t as kw;

  1. concat,concat_ws

不同列的字符串拼接到一起

concat_ws 可以把array中的元素拼接到同一个字符串中指定分割符

  1. str_to_map 把具有key:value形式字符串转换成map

根据文章id找到用户查看文章的关键字并统计频率

select a.user_id, b.kw,count(1) as weight from user_actions as a left outer JOIN (select article_id,kw from articles lateral view outer explode(key_words) t as kw) b on (a.article_id = b.article_id) group by a.user_id,b.kw order by a.user_id,weight desc;

结果

11      kw1     4

11      kw8     3

11      kw5     1

11      kw9     1

11      kw4     1

22      kw7     2

22      kw9     1

22      kw1     1

22      kw3     1

22      kw4     1

22      kw5     1

22      kw6     1

33      kw3     1

33      kw8     1

33      kw7     1

33      kw6     1

33      kw1     1

35      NULL    1

35      kw3     1

35      kw6     1

77      kw1     1

77      kw4     1

77      kw5     1

77      kw7     1

77      kw9     1

99      NULL    1

99      kw3     1

99      kw6     1

将用户查看的关键字和频率合并成 key:value形式并按用户聚合

select cc.user_id,str_to_map(concat_ws(',',collect_set(cc.kw_w))) as wm from(select a.user_id, concat_ws(':',b.kw,cast (count(1) as string)) as kw_w from user_actions as a left outer JOIN (select article_id,kw from articles lateral view outer explode(key_words) t as kw) b on (a.article_id = b.article_id) group by a.user_id,b.kw

) as cc group by cc.user_id;

结果

11      {"kw1":"4","kw4":"1","kw5":"1","kw8":"3","kw9":"1"}

22      {"kw1":"1","kw3":"1","kw4":"1","kw5":"1","kw6":"1","kw7":"2","kw9":"1"}

33      {"kw1":"1","kw3":"1","kw6":"1","kw7":"1","kw8":"1"}

35      {"1":null,"kw3":"1","kw6":"1"}

77      {"kw1":"1","kw4":"1","kw5":"1","kw7":"1","kw9":"1"}

99      {"1":null,"kw3":"1","kw6":"1"}

将用户的阅读偏好结果保存到表中

create table user_kws as

select cc.user_id,str_to_map(concat_ws(',',collect_set(cc.kw_w))) as wm from(select a.user_id, concat_ws(':',b.kw,cast (count(1) as string)) as kw_w from user_actions as a left outer JOIN (select article_id,kw from articles lateral view outer explode(key_words) t as kw) b on (a.article_id = b.article_id) group by a.user_id,b.kw) as cc group by cc.user_id;

查看新创建的表

从表中通过key查询map中的值

 

从表中获取map中所有的key 所有的value

lateral view explodemap中的数据转换成多列

 

4.Hbase使用

名称

命令表达式

查看所有表

list

创建表

create '表名', '列族名1','列族名2','列族名n'

添加记录

put '表名','行名','列名:','

查看记录

get '表名','行名'

查看表中的记录总数

count '表名'

删除记录

delete '表名', '行名','列名'

删除一张表

第一步 disable '表名' 第二步 drop '表名'

查看所有记录

scan "表名称"

查看指定表指定列所有数据

scan '表名' ,{COLUMNS=>'列族名:列名'}

更新记录

重写覆盖

创建命名空间

create_namespace 'test'

删除命名空间

drop_namespace ‘test’

创建表并且删除表

创建命名空间并在命名空间内创建表

插入数据

查询表中的所有数据

Scan查询中添加限制条件

限制输出两行

STARTROW 限制起始的Rowkey

ROWPREFIXFILTER rowkey 前缀过滤器

查询某个rowkey的数据

查询某个列簇的数据

删除表中的数据

清空数据

 

5.Kafka使用

启动kafka服务

> bin/kafka-server-start.sh config/server.properties &

创建一个主题(topic)

> bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

创建好之后,可以通过运行以下命令,查看已创建的topic信息

> bin/kafka-topics.sh --list --zookeeper localhost:2181

test

发送消息

消费消息

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值