2021-07-02

Hadoop集群构建

配主机名
vi /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=hadoop01

2.配置IP映射

vi /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.121.134 hadoop01
192.168.121.135 hadoop02
192.168.121.136 hadoop03

3.配置每台虚拟机网卡的Mac地址
vi /etc/udev/rules.d/70-persistent-net.rules

SUBSYSTEM==“net”,ACTION==“add”,DRIVERS=="?",ATTR{address}“00:0C:29:79:7E:4B”,ATTR{type}“1”,KERNEL=="eth",NAME=“eth0”

修改各机网卡,NAME=“eth0”

4.配置静态IP
vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
TYPE=Ethernet
UUID=0caefa76-57f7-459f-a7cf-d310edf03281
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
HWADDR=00:0C:29:19:08:CB
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME=“System eth0”

IPADDR=192.168.121.134
NETMASK=255.255.255.0
GATEWAY=192.168.121.2
DNS1=8.8.8.8

5.重启后验证效果

reboot

  1. 在虚拟机上查看是否安装了SSH服务

rpm -qa | grep ssh

7.查看是否已启动SSH服务

ps -e | grep sshd

8.如未安装,可用如下命令安装

yum install openssh-server

9.在CRT中远程连接hadoop01、hadoop02、hadoop03
需注意,linux命令行的提示,主机名要确保正确,若不正确,用命令修正

设置主机名:hostnamectl set-hostname hadoop02,设置后reboot,使之生效。

10.三台虚拟机上分别生成公钥与私钥

ssh-keygen -t rsa

  1. 三台机器将拷贝公钥到hadoop01,三台机器分别执行命令:

ssh-copy-id hadoop01

12.把保存公钥的文件authorized_keys复制到hadoop02和hadoop03下。

scp /root/.ssh/authorized_keys hadoop02:/root/.ssh

  1. 到此,三台虚拟机实现互相实现免密登录
    如:在hadoop01上,ssh hadoop02,ssh hadoop03
    在hadoop02上,ssh hadoop01,ssh hadoop03
    在hadoop03上,ssh hadoop01,ssh hadoop02

  2. 安装JDK

先用rz命令上传安装包,而后解压安装包到 /export/servers/目录下,然后重命名为jdk。
34 rz
35 ls
36 tar -zxvf jdk-8u202-linux-x64.tar.gz -C /export/servers/
37 cd /export/servers
38 ls
39 mv jdk1.8.0_202/ jdk
40 ls

  1. 配置JDK环境变量
    vi /etc/profile
    添加如下内容
    export JAVA_HOME=/export/servers/jdk
    export PATH= P A T H : PATH: PATH:JAVA_HOME/bin
    export CLASSPATH=.: J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt. jar: JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar

然后保存退出,输入 source /etc/profile 使之生效。
然后验证是否安装成功 java -version

  1. 安装hadoop

cd /export/software/

把安装包上传到software下,然后rz上传,然后解压

tar -zxvf hadoop-2.7.4.tar.gz -C /export/servers/

配置hadoop系统环境变量 vi /etc/profile

export HADOOP_HOME=/export/servers/hadoop-2.7.4
export PATH=: H A D O O P H O M E / b i n : HADOOP_HOME/bin: HADOOPHOME/bin:HADOOP_HOME/sbin:$PATH

17.验证JDK,hadoop是否安装成功

java -version

hadoop version


  1. hadooop集群配置
    在此路径下:cd /export/servers/ hadoop-2.7.4 /etc/hadoop,可以看到有许多配置文件。

1、配置hadoop集群主节点

(1)修改hadoop-env.sh文件

   输命令 vi hadoop-env.sh

export JAVA_HOME=/export/servers/jdk

(2)修改core-site.xml文件


fs.defaultFS
hdfs://hadoop01:9000


hadoop.tmp.dir
/export/servers/hadoop-2.7.4/tmp

(3)修改hdfs-site.xml文件

dfs.replication 3 dfs.namenode.secondary.http-address hadoop02:50090

(4)修改mapred-site.xml文件

mapreduce.framework.name yarn

(5)修改yarn-site.xml文件


yarn.resourcemanager.hostname
hadoop01


yarn.nodemanager.aux-services
mapreduce_shuffle

(6)修改slaves文件,
先打开该配置文件 vi slaves,删除里面的内容(默认localhost),然后输入如下内容:
hadoop01
hadoop02
hadoop03

(7)将集群主节点的配置文件分发到其他子节点

scp /etc/profile hadoop02:/etc/profile
scp /etc/profile hadoop03:/etc/profile
scp -r /export/ hadoop02:/
scp -r /export/ hadoop03:/

然后在hadoop02、hadoop03上分别执行 source /etc/profile

(8)格式化文件系统

在hadoop01中,输入命令 hdfs namenode -format

(9)启动和关闭hadoop集群
在hadoop01上,启动HDFS集群
hadoop-daemon.sh start namenode(只能在hadoop01上运行)
hadoop-daemon.sh start datanode
然后jps,看运行状态

在hadoop01上,启动Yarn集群
yarn-daemon.sh start resourcemanager(只能在hadoop01上运行)
yarn-daemon.sh start nodemanager

然后在hadoop02、hadoop03上分别启动HDFS集群、Yarn集群

hadoop-daemon.sh start datanode
yarn-daemon.sh start nodemanager

在hadoop02上,将它作为第二主节点,辅助hadoop01管理集群

hadoop-daemon.sh start secondarynamenode

若要关闭某个节点上的集群,只需要将上述命令中的start改为stop即可。
也可以用脚本一键启动和关闭
(1)在主节点hadoop01执行指令 start-dfs.sh 或 stop-dfs.sh 启动/关闭所有HDFS服务进程;
(2)在主节点hadoop01执行指令 start-yarn.sh 或 stop-yarn.sh 启动/关闭所有YARN服务进程;
(3)在主节点hadoop01执行指令 start-all.sh 或 stop-all.sh 启动/关闭整个hadoop集群服务;

接下来,可通过UI界面查看Hadoop运行状态
首先,先在windows下配置一下IP映射
C:\Windows\System32\drivers\etc下,打开hosts,加入以下3句话

192.168.121.134 hadoop01
192.168.121.135 hadoop02
192.168.121.136 hadoop03

否则,只能通过IP访问。

临时关闭防火墙: systemctl stop firewalld.service
禁止开机启动防火墙: systemctl disable firewalld.service

然后,通过UI界面查看hadoop集群情况
在浏览器中输入 hadoop01:50070,查看HDFS的运行情况
在浏览器中输入 hadoop01:8088,查看YARN的运行情况

最后,进行集群初体验,在export/data目录下,创建word.txt,输入一些单词,彼此用空格隔开,
然后,在HDFS上创建文件夹wordcount,input

hadoop fs -mkdir -p /wordcount/input

然后把word.txt上传到HDFS上,放在input文件夹下

hadoop fs -put /export/data/word.txt /wordcount/input

然后,在/export/servers/hadoop-2.7.4/share/hadoop/mapreduce/下运行hadoop-mapreduce-examples-2.7.4.jar
并指定源文件的位置和输出文件的位置:

hadoop jar hadoop-mapreduce-examples-2.7.4.jar wordcount /wordcount/input /wordcount/output

此过程可以多次测试,重写word.txt,删除HDFS上input目录下的原有文件,删除output文件夹及其目录下的所有文件
命令如下:

hadoop fs -rm -f /wordcount/input/word.txt

hadoop fs -rm -r /wordcount/output

删除后重新上传,并运行jar包进行统计。


第三章 HDFS分布式文件系统

Hadoop集群启动后,在hadoop01下,输入 hadoop fs -ls / 查看HDFS根目录下的文件情况
hadoop fs -mkdir -p itcast/hadoop
hadoop fs -rm -r /itcast 删除目录及以下所包含的目录文件
hadoop fs -put -f install.log /

在data目录下,建立logs文件夹 mkdir logs

/export/data/logs下,建立脚本文件 upload2HDFS.sh

vi upload2HDFS.sh,内容如下:

#!/bin/bash

#配置java环境变量
export JAVA_HOME=/export/servers/jdk
export JRE_HOME= J A V A H O M E / j r e e x p o r t C L A S S P A T H = . : {JAVA_HOME}/jre export CLASSPATH=.: JAVAHOME/jreexportCLASSPATH=.:{JAVA_HOME}/lib: J R E H O M E / l i b e x p o r t P A T H = {JRE_HOME}/lib export PATH= JREHOME/libexportPATH={JAVA_HOME}/bin:$PATH

#配置hadoop环境变量
export HADOOP_HOME=/export/servers/hadoop-2.7.4
export PATH= H A D O O P H O M E / b i n : {HADOOP_HOME}/bin: HADOOPHOME/bin:{HADOOP_HOME}/sbin:$PATH

#日志文件存放的目录
log_src_dir=/export/data/logs/log/
#待上传文件存放的目录
log_toupload_dir=/export/data/logs/toupload/

date1=date -d last-day +%Y_%m_%d
#日志文件上传到hdfs的根路径
hdfs_root_dir=/data/clickLog/$date1/
#打印环境变量信息
echo "envs: hadoop_home: KaTeX parse error: Expected 'EOF', got '#' at position 14: HADOOP_HOME" #̲读取日志文件的目录,判断是否有…log_src_dir

#以下是实现从日志存放目录移动到待上传目录的过程
ls l o g s r c d i r ∣ w h i l e r e a d f i l e N a m e d o i f [ [ " log_src_dir | while read fileName do if [[ " logsrcdirwhilereadfileNamedoif[["fileName" == access.log.* ]]; then
date=date +%Y_%m_%d_%H_%M_%S
#将文件移动到待上传目录并重命名
echo “moving l o g s r c d i r log_src_dir logsrcdirfileName to
KaTeX parse error: Expected group after '_' at position 33: …xxxxx_click_log_̲fileName”$date"
mv l o g s r c d i r log_src_dir logsrcdirfileName KaTeX parse error: Expected group after '_' at position 33: …xxxxx_click_log_̲fileName"$date
#将待上传的文件path写入一个列表文件willDoing
echo KaTeX parse error: Expected group after '_' at position 33: …xxxxx_click_log_̲fileName"$date >> l o g t o u p l o a d d i r " w i l l D o i n g . " log_toupload_dir"willDoing." logtouploaddir"willDoing."date
fi
echo KaTeX parse error: Expected group after '_' at position 33: …xxxxx_click_log_̲fileName"$date >> l o g t o u p l o a d d i r " w i l l D o i n g . " log_toupload_dir"willDoing." logtouploaddir"willDoing."date
fi
done

#以下是实现从待上传目录传至HDFS中
#找到列表文件willDoing
ls KaTeX parse error: Expected 'EOF', got '#' at position 96: …ine do #̲打印信息 ec…line
#将待上传文件列表willDoing改名为willDoing_COPY_
mv l o g t o u p l o a d d i r log_toupload_dir logtouploaddirline l o g t o u p l o a d d i r log_toupload_dir logtouploaddirline"COPY"
#读列表文件willDoing_COPY_的内容(一个一个的待上传文件名)
#此处的line就是列表中的一个待上传文件的path
cat l o g t o u p l o a d d i r log_toupload_dir logtouploaddirline"COPY" |while read line
do
#打印信息
echo “puting… l i n e t o h d f s p a t h . . . . . line to hdfs path..... linetohdfspath.....hdfs_root_dir”
hadoop fs -mkdir -p $hdfs_root_dir
hadoop fs -put $line $hdfs_root_dir
done
mv l o g t o u p l o a d d i r log_toupload_dir logtouploaddirline"COPY" l o g t o u p l o a d d i r log_toupload_dir logtouploaddirline"DONE"
done

可以删除log文件夹和toupload文件夹,重新创建目录和文件
rm -rf log
rm -rf toupload

在/export/data/logs/log下,手动创建一个日志文件access.log
vi access.log

然后复制4份文档,分别是access.log.1,access.log.2,access.log.3,access.log.4

再到logs目录下,执行 sh upload2HDFS.sh


在windows中搭建hadoop环境
在hadoop2.7.4(windows包)放在无空格无中文的目录下,如D:\hadoop-2.7.4
然后配置系统的环境变量,创建一个HADOOP_HOME, 路径为D:\hadoop-2.7.4
再在path变量中添加一个%HADOOP_HOME%\bin

再把D:\hadoop-2.7.4\bin下面的hadoop.dll复制粘贴到C:\Windows\System32

最后重启生效。

在eclipse中,创建Maven工程,在pom.xml中,0.0.1-SNAPSHOT和中,添加以下代码:


org.apache.hadoop
hadoop-common
2.7.4


org.apache.hadoop
hadoop-hdfs
2.7.4


org.apache.hadoop
hadoop-client
2.7.4


junit
junit
RELEASE

  1. 在项目src下,创建com.itcast.hdfsdemo的包
    在包下创建HDFS_CRUD.java文件
    Before,test会先运行构造方法在运行下面的方法
    (1) 初始化客户端对象
    public class HDFS_CRUD {
    FileSystem fs =null;
    @Before
    public void init() throws IOException {
    //构造配置参数对象:Configuration
    Configuration conf =new Configuration();
    //设置参数,指定我们要访问的文件系统类型:HDFS文件系统
    conf.set(“fs.defaultFS”,“hdfs://hadoop01:9000”);
    //设置客户端的访问身份,以root身份访问HDFS
    System.setProperty(“HADOOP_USER_NAME”,“root”);
    fs = FileSystem.get(conf);
    }

(2)上传文件到HDFS:方法testAddFileToHdfs()
首先在D盘创建一个文本文件:test.txt 文件内容:hello java hello HDFS

@Test
public void testAddFileToHdfs() throws IOException, InterruptedException, URISyntaxException {
//获取文件系统
Configuration conf = new Configuration();
//在集群上
FileSystem fs = FileSystem.get(new URI(“hdfs://hadoop01:9000”), conf, “root”);
//Scanner开启
String str1 = “D:\hadop\test.txt.txt”;
//输入文件上传后的目标路径
String str2 = “/”;
//上传文件
fs.copyFromLocalFile(new Path(str1), new Path(str2));
//关闭资源
fs.close();
//运行成功输出提示
System.out.println(“Put Local File Successfully”);
}
(2)从HDFS下载文件到本地,testDownloadFileToLocal()方法
@Test
public void testDownloadFileToLocal() throws IllegalArgumentException, IOException{
fs.copyToLocalFile(new Path("/data"), new Path(“D:/”));
fs.close();
}

(4)目录操作:方法:testMkdirAndDeleteAndRename()
@Test
public void testMkdirAndDeleteAndRename() throws IllegalArgumentException, IOException {
//fs.mkdirs(new Path("/a/b/c"));
//fs.mkdirs(new Path("/a2/b2/c2"));

	//fs.rename(new Path("/a"), new Path("/a3"));
	fs.delete(new Path("/a2"), true);
}

(5)查看目录中的文件信息 方法:testListFiles() (getPermission()打印当前文件的权限)
@Test
public void testListFiles() throws FileNotFoundException, IllegalArgumentException, IOException {
//获取迭代器对象
RemoteIterator listFiles = fs.listFiles(new Path("/"), true);
//遍历迭代器
while(listFiles.hasNext()) {
LocatedFileStatus fileStatus = listFiles.next();
//打印当前文件的名字
System.out.println(fileStatus.getPath().getName());
//打印当前文件块大小
System.out.println(fileStatus.getBlockSize());
//打印当前文件内容的长度
System.out.println(fileStatus.getLen());
//获取文件块信息(块长度,块的datanode信息)
BlockLocation[] blockLocations=fileStatus.getBlockLocations();
for (BlockLocation bl : blockLocations) {
System.out.println(“block-length:”+bl.getLength()+"–"+“block-offset”+bl.getOffset());
//获取每一个block的datanode地址列表
String[] hosts=bl.getHosts();
for (String host:hosts) {
System.out.println(host);
}

	}
	System.out.println("-----------分割线-------------");
	}
}
}

完整HadoopDemo/pom.xml文件代码如下:

4.0.0 com.itcast HadoopDemo 0.0.1-SNAPSHOT org.apache.hadoop hadoop-common 2.7.4 org.apache.hadoop hadoop-hdfs 2.7.4 org.apache.hadoop hadoop-client 2.7.4 junit junit RELEASE

完整HDFS_CRUD.java文件代码如下:

package com.itcast.hdfsdemo;
import java.io.;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.
;
import org.junit.*;

public class HDFS_CRUD {
FileSystem fs = null;
@Before
public void init() throws Exception{
//构造配置参数对象:Configuration
Configuration conf = new Configuration();
//设置参数,指定我们要访问的文件系统的类型:HDFS文件系统
conf.set(“fs.defaultFS”,“hdfs://hadoop01:9000”);
//设置客户端的访问身份,以root身份访问HDFS
System.setProperty(“HADOOP_USER_NAME”, “root”);

	//通过FileSystem的静态方法,获取文件系统客户端对象
	fs = FileSystem.get(conf);
}

/**
 *  将本地文件上传到HDFS
 *  @throws IOException
 */
@Test
public void testAddFileToHdfs() throws IOException{
//要上传的文件所在本地路径
Path src = new Path("D/test.txt");
//要上传到HDFS的目标路径
Path dst = new Path("/testFile");
//实现文件上传
fs.copyFromLocalFile(src, dst);
//关闭资源
fs.close();
}

//从HDFS中复制文件到本地文件系统
@Test
public void testDownloadFileToLocal() throws IllegalArgumentException,

IOException{
//下载文件
fs.copyToLocalFile(new Path("/testFile"), new Path(“D:/”));
fs.close();
}

//创建、删除、重命名文件
@Test
public void testMkdirAndDeleteAndRename() throws Exception{
	//创建目录
	fs.mkdirs(new Path("/a/b/c"));
	fs.mkdirs(new Path("/a2/b2/c2"));
	//重命名文件或文件夹
	fs.rename(new Path("/a"), new Path("/a3"));
	//删除文件夹,如果是非空文件夹,参数2必须给值true
	fs.delete(new Path("/a2"),true);
}

//查看目录信息,只显示文件
@Test
public void testListFiles() throws FileNotFoundException, IllegalArgumentException, IOException {
//获取迭代器对象
RemoteIterator listFiles = fs.listFiles(new Path("/"), true);
//遍历迭代器
while(listFiles.hasNext()) {
LocatedFileStatus fileStatus = listFiles.next();
//打印当前文件的名字
System.out.println(fileStatus.getPath().getName());
//打印当前文件块大小
System.out.println(fileStatus.getBlockSize());
//打印当前文件内容的长度
System.out.println(fileStatus.getLen());
//获取文件块信息(块长度,块的datanode信息)
BlockLocation[] blockLocations=fileStatus.getBlockLocations();
for (BlockLocation bl : blockLocations) {
	System.out.println("block-length:"+bl.getLength()+"--"+"block-offset"+bl.getOffset());
	//获取每一个block的datanode地址列表
	String[] hosts=bl.getHosts();
	for (String host:hosts) {
		System.out.println(host);
	}
	
}
System.out.println("-----------分割线-------------");
}

}
}


Zookeeper安装包的下载与安装

cd /export/software,用rz命令上传Zookeeper安装包,放在software目录下。

解压Zookeeper安装包,至 /export/servers/目录下。
tar -zxvf zookeeper-3.4.10.tar.gz -C /export/servers/

1、然后,修改zookeeper的配置文件

进入servers目录, cd zookeeper-3.4.10/conf,

cp zoo_sample.cfg zoo.cfg

vi zoo.cfg,找到dataDir,

#设置数据文件目录+数据持久化路径
dataDir=/export/data/zookeeper/zkdata

然后,在文档末尾,添加以下语句:

#配置zk集群的服务器编号以及对应的主机名、选举端口号和通信端口号(心跳端口号)
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888

2、创建myid文件
首先,根据配置文件zoop.cfg中设置的dataDir目录,创建zkdata文件夹,具体命名如下:

mkdir -p /export/data/zookeeper/zkdata

cd /export/data/zookeeper/zkdata

echo 1 > myid

这样,就在/zkdata目录下,创建了一个myid文件,内容为1

3、配置环境变量

vi /etc/profile

输入:
export ZK_HOME=/export/servers/zookeeper-3.4.10
export PATH= P A T H : PATH: PATH:JAVA_HOME/bin: H A D O O P H O M E / b i n : HADOOP_HOME/bin: HADOOPHOME/bin:HADOOP_HOME/sbin:$ZK_HOME/bin

4、分发Zookeeper相关文件至其他两台服务器

首先,将Zookeeper安装目录分发

scp -r /export/servers/zookeeper-3.4.10/ hadoop02:/export/servers/

scp -r /export/servers/zookeeper-3.4.10/ hadoop03:/export/servers/

其次,将myid文件分发,并修改myid的文件内容,依次对应服务器号进行设置,分别为2、3。

scp -r /export/data/zookeeper/ hadoop02:/export/data/
scp -r /export/data/zookeeper/ hadoop03:/export/data/

最后,将profile文件也分发至hadoop02, hadoop03服务器上,具体命令如下:

scp /etc/profile hadoop02:/etc/profile

scp /etc/profile hadoop03:/etc/profile

5、环境变量生效

在三台服务器上,分别刷新profile配置文件,使环境变量生效

source /etc/profile

6、Zookeeper服务的启动和关闭

依次在三台服务器上,启动Zookeeper服务

zkServer.sh start

其次,执行相关命令查看该节点Zookeeper的角色

zkServer.sh status

同时,我们还可以关闭Zookeeper服务

zkServer.sh stop


Zookeeper的Shell操作

启动Zookeeper, 在每一台服务器上执行如下脚本,启动Zookeeper

zkServer.sh start

服务后,连接Zookeeper服务。输入

zkCli.sh -server localhost:2181

ls /

ls2 /

创建节点:
create -s /testnode test

create -e /testnode-temp testtemp

create /testnode-p testp

查看节点,注意,节点的路径必须写绝对路径:

get /testnode-temp

修改节点:

set /testnode-temp 123,把testnode-temp下的数据改为 123

监听,在hadoop01上,

get /testnode-temp watch

在hadoop02上,

zkCli.sh -server hadoop01:2181

set /testnode-temp testwatch

这是地,在hadoop01上会收到一个WatchEvent

删除节点:

delete /testnode-temp,也就是,delete命令后跟节点的绝对路径。delete只能删除没有子节点的节点。

rmr 命令可实现递归删除


Hive数据仓库的安装和操作

将apache-hive-1.2.1-bin.tar.gz安装包上传到/export/software/下,再解压至/export/servers/。

tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /export/servers/

cd apache-hive-1.2.1-bin

bin/hive

就进入了hive的交互界面。

在线安装 mysql:

yum install mysql
yum mysql-server
yum mysql-devel

官网下载安装mysql-server。

wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

rpm -ivh mysql-community-release-el7-5.noarch.rpm

yum install mysql-community-server

安装成功后重启mysql服务。

service mysqld restart

修改登录MySQL用户名及密码

mysql>use mysql

mysql>UPDATE user SET Password=PASSWORD(‘123456’)WHERE user=‘root’;

//设置允许远程登录

mysql>GRANT ALL DRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;

//强制写入,刷新权限

mysql> FLUSH PRIVILEGES;

重启虚拟机后,重新登录mysql

mysql -u root -p,然后输入密码123456,即登录mysql

Hive配置:

cd /export/servers/apache-hive-1.2.1-bin/

cd conf/

conf目录下有一个文件 hive-env.sh.template

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

vi hive-env.sh,修改hadoop路径

HADOOP_HOME=/export/servers/hadoop-2.7.4

在conf目录下,创建一个文件hive-site.xml

vi hive-site.xml

javax.jdo.option.ConnectionURL jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver javax.jdo.option.ConnectionUserName root javax.jdo.option.ConnectionPassword 123456

在lib目录下,上传mysql-connector-java-5.1.46.jar,即完成Hive的配置。


Hive的管理

在Hive的安装目录下,执行bin/hive,

hive>
查看数据仓库中的表
hive>show tables;

远程服务

首先,将hadoop01服务器安装的Hive程序分别复制给hadoop02、hadoop03服务器上。
scp -r /export/servers/apache-hive-1.2.1-bin/ hadoop02:/export/servers/

scp -r /export/servers/apache-hive-1.2.1-bin/ hadoop03:/export/servers/

在Hive的安装目录下,执行bin/hiveserver2,

然后在hadoop01窗口下,复制一个会话窗口,重新进入hive安装目录下,cd /export/servers/apache-hive-1.2.1-bin/

执行 bin/beeline,弹出beeline> ,输入 !connect jdbc:hive2://hadoop01:10000,然后输入用户名root和密码123456,即可进行hive的相关操作。

create table t_user(id int,name string,age int)ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’;

在export/data/hivedata下创建user.txt,vi user.txt,内容如下:

1,allen,18
2,tom,23
3,jerry,28

将user.txt上传到t_user目录下
hadoop fs -put user.txt /user/hive/warehouse/itcast.db/t_user


下面这行命令用于删除hdfs下的文件:
hadoop fs -rm -r -f /user/hive/warehouse/t_student


创建内部
表t_student:
create table t_student(id int,name string,hobby map)
row format delimited fields terminated by ‘,’
collection items terminated by ‘-’
map keys terminated by ‘:’;

在export/data/hivedata下创建student.txt,vi student.txt,内容如下:

1,zhangsan,唱歌:非常喜欢-跳舞:喜欢-游泳:一般般
2,lisi,打游戏:非常喜欢-篮球:不喜欢

将student.txt上传到t_student目录下
hadoop fs -put student.txt /user/hive/warehouse/itcast.db/t_student/

创建外部表
create external table student_ext(Sno int,Sname string,Sex string,Sage int,Sdept string)
row format delimited fields terminated by ‘,’ location ‘/stu’;

创建分区表
create table t_user_p(id int, name string) partitioned by (country string)
row format delimited fields terminated by ‘,’ ;

加载数据:
load data local inpath ‘/export/data/hivedata/user_p.txt’ into table t_user_p partition(country=‘USA’);


第八章 Flume

cd /export/software/
ls
上传flume安装包,rz
ls
解压tar -zxvf apache-flume-1.8.0-bin.tar.gz -C /export/servers/

cd /export/servers/
ls
修改flume文件夹的名字, mv apache-flume-1.8.0-bin /export/servers/flume

cd flume/

ls
cd conf/
ls
cp flume-env.sh.template flume-env.sh
vi flume-env.sh
修改JAVA_HOME,export JAVA_HOME=/export/servers/jdk
ls
vi /etc/profile
在最末行添加以下两行代码
export FLUME_HOME=/export/servers/flume
export PATH= P A T H : PATH: PATH:FLUME_HOME/bin:

source /etc/profile

在conf目录下创建netcat-logger.conf,内容如下:

示例配置方案:单节点Flume配置

定义Agent中各个组件名称,

其中该Agent名为a1,sources名为r1,sinks名为k1,channels名为c1

a1.sources = r1
a1.sinks = k1
a1.channels = c1

描述并配置sources组件(数据源类型、采集数据源的应用地址)

a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

描述并配置sinks组件(采集后的数据流出的类型)

a1.sinks.k1.type = logger

描述并配置channels(缓存类型、内存缓存大小和事务缓存大小)

a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

将source和sink通过同一个channel连接绑定

a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

然后在flume目录下,执行 flume-ng agent --conf conf/ --conf-file conf/netcat-logger.conf \ --name a1 -Dflume.root.logger=INFO,console

克隆一个hadoop01窗口,执行 telnet localhost 44444

若没有telnet命令,则用以下命令下载
yum -y install telnet

之后在克隆窗口中输入一个单词hello,提示OK,随后在hadoop01窗口,能看到event,并出现hello,则表示监听成功。

在hadoop01上,启动flume

flume-ng agent -c conf/ -f conf/avro-hdfs_logCollection.conf \ --name a1 -Dflume.root.logger=INFO,console

在hadoop02,03上,启动flume

flume-ng agent -c conf/ -f conf/exec.avro_logCollection.conf \ --name a1 -Dflume.root.logger=INFO,console

分别将hadoop02, hadoop03克隆3个会话窗口,在3个窗口中分别输入以下3行命令:

while true; do echo “access access …” >> /root/logs/access.log ; \sleep 1;done

while true; do echo “nginx nginx …” >> /root/logs/nginx.log ; \sleep 1;done

while true; do echo “web web …” >> /root/logs/web.log ; \sleep 1;done

你可能感兴趣的:(笔记)