配主机名
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=hadoop01
2.配置IP映射
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.重启后验证效果
7.查看是否已启动SSH服务
8.如未安装,可用如下命令安装
9.在CRT中远程连接hadoop01、hadoop02、hadoop03
需注意,linux命令行的提示,主机名要确保正确,若不正确,用命令修正
设置主机名:hostnamectl set-hostname hadoop02,设置后reboot,使之生效。
10.三台虚拟机上分别生成公钥与私钥
ssh-keygen -t rsa
ssh-copy-id hadoop01
12.把保存公钥的文件authorized_keys复制到hadoop02和hadoop03下。
scp /root/.ssh/authorized_keys hadoop02:/root/.ssh
到此,三台虚拟机实现互相实现免密登录
如:在hadoop01上,ssh hadoop02,ssh hadoop03
在hadoop02上,ssh hadoop01,ssh hadoop03
在hadoop03上,ssh hadoop01,ssh hadoop02
安装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
然后保存退出,输入 source /etc/profile 使之生效。
然后验证是否安装成功 java -version
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、配置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 [[ " logsrcdir∣whilereadfileNamedoif[["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
(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,内容如下:
a1.sources = r1
a1.sinks = k1
a1.channels = c1
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
a1.sinks.k1.type = logger
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
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