一、实验
这里的实验素材是参照 本地数据集上传到数据仓库Hive
1.上传实验数据到 hdfs
因为 spark、hbase、hive 和 hadoop 都可以很好的集成,因此传到 hdfs 上对于后续的引用会很方便。
源数据在 点击这里下载data_format.zip数据集。位于百度网盘(下载速度超恶心, 100kb每秒),而我的服务器在海外,国际带宽又比较慢,下载文件解压出来接近3g大小, 所以我这里采用了两种方法。
unzip data_format.zip
head -n 1000000 user_log.csv > ~/ user_log_2.csv
scp ~/user_log_2.csv hadoop@server_ip:~/tmp_data
- 一些实验,不需要所有数据,所以用 head 截取前 100 万行。
- 另一种方式是通过国内上传到阿里云青岛地区的 oss 上,然后在境外下载这个外链,速度可以到 10M/s, 貌似有专线。
- 如何绕过百度网盘限速 (todo)
传至 hdfs
hdfs dfs -mkdir -p /dbtaobao/big_data/user_log # 创建 user_log 目录,用于映射表
hdfs dfs -put ~/tmp_data/user_log.csv /dbtaobao/big_data/user_log # 上传本地文件到 hdfs
2.创建 HBASE 表 schema 并导入数据
user_log.csv 字段说明
1. user_id | 买家id
2. item_id | 商品id
3. cat_id | 商品类别id
4. merchant_id | 卖家id
5. brand_id | 品牌id
6. month | 交易时间:月
7. day | 交易事件:日
8. action | 行为,取值范围{0,1,2,3},0表示点击,1表示加入购物车,2表示购买,3表示关注商品
9. age_range | 买家年龄分段:1表示年龄<18,2表示年龄在[18,24],3表示年龄在[25,29],4表示年龄在[30,34],5表示年龄在[35,39],6表示年龄在[40,49],7和8表示年龄>=50,0和NULL则表示未知
10. gender | 性别:0表示女性,1表示男性,2和NULL表示未知
11. province| 收获地址省份
启动 hbase
$HADOOP_HOME/sbin/start_all.sh # 启动 hadoop 各 daemon 服务
start_hbase.sh # 启动 hbase
hbase shell # 打开 shell 与 hbase 交互
导入数据
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=',' -Dimporttsv.columns='HBASE_ROW_KEY,log:item_id,log:cat_id,log:merchant_id,log:brand_id,log:month,log:day,log:action,log:age_range,log:gender,log:province' user_log /dbtaobao/big_data/user_log/user_log.csv
# 出现以下错误
Caused by: java.lang.ClassNotFoundException: org.apache.htrace.SamplerBuilder
# 原因是只有 htrace-core-3.2.0-incubating.jar 含有该类文件
cp $HBASE_HOME/lib/client-facing-thirdparty/htrace-core-3.1.0-incubating.jar $HBASE_HOME/lib/
若 lib 下没有 3.X 版本,则需从 maven 仓库下
cd $HBASE_HOME/lib && wget http://central.maven.org/maven2/org/apache/htrace/htrace-core/3.2.0-incubating/htrace-core-3.2.0-incubating.jar
3.hadoop生态常用端口
https://kontext.tech/docs/DataAndBusinessIntelligence/p/default-ports-used-by-hadoop-services-hdfs-mapreduce-yarn
spark-submit --repositories http://repo.hortonworks.com/content/groups/public/ --jars ~/jars/shc-core-1.1.1-2.1-s_2.11.jar --class=io.jiquan.example.spark.Main ./target/scala-2.11/spark-read-from-hdfs-and-write-to-hbase_2.11-1.1.jar