需求:按条件筛选Hive表中的数据同步到ClickHouse中
方法一:
按照ClickHouse 官方文档提供的方法,在ClickHouse 中创建HDFS引擎表,读取Hive的数据,将读取的数据插入到ClickHouse本地表中。
缺点:
1.需要在clickhouse中创建两张表
2.如果Hadoop集群压力比较大,在读取HDFS数据的时候会出现超时的情况
方法二:
将Hive中的数据导出为csv格式后,加载到clickhouse中。
缺点
1.数据量大的时候导出时间比较长
方法三:
在能直接读取HDFS数据的主机上安装clickhouse-client,读取HDFS数据后直接插入ClickHouse。
#!/bin/bash
#######################################
# 功能:同步hdfs数据到clickhouse
# usage:sh shell_name table_name
#######################################
current_dir=$(cd `dirname $0`; pwd)
# 获取Hive表在HDFS上的存储路径
table_name=$1
input_file=`hadoop fs -ls /warehouse/tablespace/hive/db01/${table_name}/*/*|awk '{print $8}'>${current_dir}/input_file.txt`
# 定义Clickhouse 数据源连接
ch="clickhouse-client -h 172.18.xxx.xxx --port 9090 -u xxx --password xxx --query "
# 将Hive存储在Hdfs上的数据同步到clickhouse
for i in `cat ${current_dir}/${input_file}`
do
echo `date +"%Y-%m-%d %H:%m:%S"` '开始执行 .....' $i
hadoop fs -text $i|${ch} "insert into xxx.xxx format CSV"
echo `date +"%Y-%m-%d %H:%m:%S"` '结束执行 .....' $i
done