
先将软件都解压
看项目需求
启动集群
进入hive
创建库 create database data; 使用库 use data;
执行命令:查看那个是活跃状态
hdfs haadmin -getServiceState nn1 hdfs haadmin -getServiceState nn2
使用SQLyog链接活跃的Hadoop
导入表
使用脚本创建表(mk_hdfsDir.sh)
#!/bin/bash
beg_date=`date -d "${1}" +%s`
end_date=`date -d "${2}" +%s`
if((beg_date >${end_date}));then
echo "beg_date < end_date"
exit 0;
fi
currentDate=""
for((i=${beg_date};i<=${end_date};i=i+86400))
do
currentDate=`date -d @${i} +%Y%m%d`
echo "-----create /${currentDate}-----"
#这个位置修改库名,表明和字段
hive -e "use test;create table order_status_log${currentDate}(id string,order_id string,order_status string,operate_time string) row format delimited fields terminated by ','; "
#hadoop fs -mkdir /${currentDate}
done
创建一个文本(json.date),用来存储时间
使用脚本自动采集(auto_mysql_hive.sh)
#!/bin/bash #1.获取到json.data中的日期 datax_json_date=`cat /root/datax/job/json.date` #2.将日期往后推一天 datax_json_date_timestamp=$[`date -d "${datax_json_date}" +%s`+86400] afterday=`date -d @${datax_json_date_timestamp} +%Y%m%d` log_dir=/root/log log_prefix=order_status #date=`cat /root/datax/job/json.date` function write_log(){ #定义输出日志格式,需要在前面加上一个日期 log_format=`date "+%Y-%m-%d %H:%M:%S"` #开始输出日志内容 echo "${log_format} $1 >> ${2}" >>${log_dir}/${log_prefix}.`date "+%Y-%m-%d"`.log #如果接受的第一个参数是ERROR,直接退出 [ $1 == "ERROR" ] && exit 1 } echo ${afterday} ${datax_json_date_timestamp} ${datax_json_date} #3.将json中的日期全局替换成下一天 #这个位置需要修改成表明 sed -i "s/order_status_log${datax_json_date}/order_status_log${afterday}/g" /root/datax/job/mysql_hive.json #修改mysql_hive.json日期返回结果 write_log INFO "mysql_hive.json文件日期由${datax_json_date}成功替换成${afterday}!!!" #4.修改json.data文本日期,需要和darax的json日期时刻保持一致 #echo ${afterday} > /root/datax/job/json.date sed -i "s/${datax_json_date}/${afterday}/g" /root/datax/job/json.date #5.执行 python /root/datax/bin/datax.py /root/datax/job/mysql_hive.json if [ $? -eq 0 ];then result=`hive -e "use test;select count(id) from order_status_log${afterday}"` write_log INFO "数据从mysql中采集成功!!!采集数据有${result}条" else write_log ERROR "数据采集失败!!!请立即检查" fi
在docker中创建MySQL容器
docker run -itd --name=mysql-test -p 8888:3306 -e MYSQL_ROOT_PASSWORD=123456 docker ps -a docker exec -it mysql-test /bin/bash service mysql start mysql -uroot -p GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; FLUSH PRIVILEGES; exit;
创建分区表(修改表名字段)
create table order_status_log(id string,order_id string,order_status string,operate_time string) partitioned by (day string) row format delimited fields terminated by ',';
使用脚本自动采集并将每天数据存到数据库中
#!/bin/bash
#输入开始日期
beg_date=`date -d "${1}" +%s`
#输入结束日期
end_date=`date -d "${2}" +%s`
#判断开始日期不能大于结束日期
if((beg_date >${end_date}));then
echo "beg_date < end_date"
exit 0;
fi
currentDate=""
#从开始日期+1天,循环到结束日期
for((i=${beg_date};i<=${end_date};i=i+86400))
do
currentDate=`date -d @${i} +%Y%m%d`
echo "-----create /${currentDate}-----"
#使用hive 命令
#进行动态分区
#将order_status_log${currentDate}插入到order_status_log分区表中,以partition(day)区分数据
hive -e "
use test;
set hive.exec.dynamic.partition.mode=nostrict;
set hive.exec.dynamic.partition=true;
set hive.exec.max.dynamic.partitions=1000;
insert into table order_status_log partition(day) select *,date(operate_time) from order_status_log${currentDate};"
done
#将导入分区表数据纪录,存到/root/sh/hive_result.txt文件中
hive -S -e "use test;select day,count(id) from order_status_log group by day;" > /root/sh/hive_result.txt
#设置数据库内容:用户名,密码,IP地址
user="root"
password="123456"
host="192.168.174.9"
prot="8888"
#登录到数据库
mysql_conn="mysql -h"$host" -u"$user" -p"$password""
#查看/root/sh/hive_result.txt文件内容,将内容分别赋给hive_date,hive_result
cat /root/sh/hive_result.txt | while read hive_date hive_result
do
#将hive_date,hive_result两个变量的值传到mysql数据库的test.hive_count表中
$mysql_conn -e "INSERT INTO test.hive_count VALUES('$hive_date','$hive_result')"
done
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)