-->只是为了自己方便所做的一些记录,仅供参考,欢迎指正<--
启动脚本,以flume为例:
#! /bin/bash
case $1 in
"start")
nohup flume-ng agent --conf /opt/installs/flume1.9/conf --name a1 --conf-file /opt/installs/flume1.9/job/mall2.conf >/opt/installs/flume1.9/out2.txt 2>&1 &
;;
"stop")
ps -ef | grep mall2.conf | grep -v grep | awk '{print $2}' | xargs kill
;;
*)
echo "请输入正确的参数"
;;
esac
虚拟机群启动脚本:
#!/bin/bash
#验证参数
if(($#==0))
then
echo 请传入要执行的命令!
exit;
fi
echo "要执行的命令是:$@"
#批量执行
for((i=11;i<=13;i++))
do
echo -----------------------hadoop$i---------------------
ssh hadoop$i "source /etc/profile;$@"
done
虚拟机群分发脚本:
#!/bin/bash
pcount=$#
if((pcount == 0));then
echo no args;
exit;
fi
pname=$1
#fname a.txt
fname=`basename $pname`
echo "$fname"
#获取上级目录绝对路径
#pdir /root/test1
pdir=`cd -P $(dirname $pname);pwd`
user=`whoami`
for((host=12;host<=13;host++));do
echo "scp -r $pdir/$fname $user@hadoop$host:$pdir"
scp -r $pdir/$fname $user@hadoop$host:$pdir
done
flume采集脚本:
自己去官网找,下面列举一个最简单的写法:
#1.声明agent中包含的source、channel、sink的名称以及个数
#a1是agent的名称 r1是source的名称、c1是channel的名称、k1是sink的名称
a1.sources = r1
a1.channels = c1
a1.sinks = k1
#2.配置source
a1.sources.r1.type = spooldir
#不同的type,下面的属性是不一样
#对指定目录下的文件中数据进行采集
a1.sources.r1.spoolDir = /opt/data/upload
a1.sources.r1.fileSuffix = .done
#3.配置channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 10000
#4.配置sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = hdfs://hadoop10:9000/flume/%Y-%m-%d
#使用本地时间戳,生成path中时间转义符
a1.sinks.k1.hdfs.useLocalTimeStamp=true
a1.sinks.k1.hdfs.fileType = DataStream
#禁止根据时间滚动生成新文件
a1.sinks.k1.hdfs.rollInterval = 0
#当文件大小达到100M时,生成新文件
a1.sinks.k1.hdfs.rollSize = 104857600
#禁止根据event个数生成新文件
a1.sinks.k1.hdfs.rollCount = 0
#5.将source、channel、sink连接在一起
#r1采集的数据放到c1这个channel
a1.sources.r1.channels = c1
#k1会从c1这个缓冲区读取数据,并且写出去
a1.sinks.k1.channel = c1
sqoop采集脚本:
RDBMS(mysql) -> HDFS:
bin/sqoop import \
--driver com.mysql.jdbc.Driver \
--connect jdbc:mysql://hadoop10:3306/test1?characterEncoding=UTF-8 \
--username root \
--password 123456 \
--table t_user \
--num-mappers 4 \
--fields-terminated-by '\t' \
--target-dir /mysql/t_user \
--delete-target-dir
RDBMS -> Hive:
bin/sqoop import \
--driver com.mysql.jdbc.Driver \
--connect jdbc:mysql://hadoop10:3306/test1?characterEncoding=UTF-8 \
--username root \
--password 123456 \
--table t_user \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-database test_hive \
--hive-table hive_user
HDFS|hive -> RDBMS:
vi a.txt
# 在文件中添加如下内容
1 zhangsan true 20 2020-01-11
2 lisi false 25 2020-01-10
3 wangwu true 36 2020-01-17
4 zhaoliu false 50 1990-02-08
5 win7 true 20 1991-02-08
#在hdfs上创建sqoop目录(目录名称随意,不过需要和后边对应),将文件上传到sqoop目录下
hdfs dfs -mkidr /sqoop
hdfs dfs -put a.txt /sqoop
解决null值定义不一样问题:
在sqoop采集脚本中加上以下两行代码:
--null-string '\\N' \
--null-non-string '\\N' \