Hadoop Demo

HDEMO

Hadoop worldcount

日志格式内容如下所示:

101.200.88.27 - - [15/May/2018:19:31:05 +0800] "GET / HTTP/1.1" 200 4219 "-" "-"

筛选提取IP,使用awk命令:

awk '{print $1}' access.log > ips.txt

上传至hdfs上:

hadoop fs -mkdir /input
hadoop fs -put ips.txt /input

执行wordcount命令:

hadoop jar hadoop jar /usr/hdp/3.1.4.0-315/hadoop-mapreduce/hadoop-mapreduce-examples.jar wordcount /input /output
19/10/16 10:11:05 INFO client.RMProxy: Connecting to ResourceManager at master.longruan.com/192.168.10.41:8050
19/10/16 10:11:06 INFO client.AHSProxy: Connecting to Application History server at master.longruan.com/192.168.10.41:10200
19/10/16 10:11:06 INFO mapreduce.JobResourceUploader: Disabling Erasure Coding for path: /user/root/.staging/job_1570779199369_0012
19/10/16 10:11:06 INFO input.FileInputFormat: Total input files to process : 1
19/10/16 10:11:06 INFO mapreduce.JobSubmitter: number of splits:2
19/10/16 10:11:07 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1570779199369_0012
19/10/16 10:11:07 INFO mapreduce.JobSubmitter: Executing with tokens: []
19/10/16 10:11:07 INFO conf.Configuration: found resource resource-types.xml at file:/etc/hadoop/3.1.4.0-315/0/resource-types.xml
19/10/16 10:11:07 INFO impl.YarnClientImpl: Submitted application application_1570779199369_0012
19/10/16 10:11:07 INFO mapreduce.Job: The url to track the job: http://master.longruan.com:8088/proxy/application_1570779199369_0012/
19/10/16 10:11:07 INFO mapreduce.Job: Running job: job_1570779199369_0012
...

查看执行的结果:

hadoop fs -cat /output/part-r-00000

Spark - SparkSQL - Python

以使用python脚本执行people为例

安装pyspark : 安装前,修改一下pip源,使用国内的速度更快

mkdir ~/.pip
vi ~/.pip/pip.conf
----输入下面内容
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn

Spark SQL所有的功能入口都是SQLContext 类。不过要创建一个SQLContext对象,首先需要有一个SparkContext对象,然后再创建SQLContext

from pyspark import SparkContext
from pyspark import SQLContext
sc = SparkContext("local","spark_demo")
spark = SQLContext(sc)
df = spark.read.json("/usr/hdp/3.1.4.0-315/spark2/examples/src/main/resources/people.json")
df.show() 
+----+-------+
| age|   name|
+----+-------+
|null|Michael|
|  30|   Andy|
|  19| Justin|
+----+-------+
df.createOrReplaceTempView("people")
#将DataFrame注册为SQL临时视图

sqlDF=spark.sql("select * from people")
sqlDF.show()
+----+-------+
| age|   name|
+----+-------+
|null|Michael|
|  30|   Andy|
|  19| Justin|
+----+-------+

Spark SQL中的临时视图是会话范围的。 如果在所有会话之间共享一个临时视图并保持活动状态,直到Spark应用程序终止,则可以创建一个全局临时视图。 全局临时视图与系统保存的数据库global_temp绑定,我们必须使用限定名称来引用它,例如, SELECT * FROM global_temp.view1

df.createGlobalTempView("people1")
spark.sql("SELECT * FROM global_temp.people1").show()
spark.newSession().sql("SELECT * FROM global_temp.people1").show()

Sqoop Client

一些字段的特别说明

--boundary-query 边界查询,也就是在导入前先通过SQL查询得到一个结果集,然后导入的数据就是该结果集内的数据,格式如:--boundary-query 'select id,no from t where id = 3',表示导入的数据为id=3的记录,或者 select min(\<split-by\>), max(\<split-by\>) from \<table name\>,注意查询的字段中不能有数据类型为字符串的字段,否则会报错

--query,-e 从查询结果中导入数据,该参数使用时必须指定–target-dir–hive-table,在查询语句中一定要有where条件且在where条件中需要包含 \$CONDITIONS,示例:--query 'select * from t where \$CONDITIONS ' --target-dir /tmp/t –hive-table t
如果使用双引号(“)将查询语句引起来的话,则必须使用$CONDITIONS进行转义,而不是$CONDITIONS, 转义之后shell才会将其视为shell变量。双引号查询语句如下所示

"SELECT * FROM x WHERE a='foo' AND \$CONDITIONS" 

–warehouse-dir–target-dir 不能同时使用,指定数据导入的存放目录,适用于hdfs导入,不适合导入hive目录

–create-hive-table:如果设置,那么如果存在目标hivetable,作业将失败。默认情况下,此属性为false。

--split-by ${tablename.column} 如果设置map数量为1个时即-m 1,不用加上--split-by ${tablename.column},否则需要加上
--incremental (mode):指定Sqoop如何确定哪些行是新的。此项参数的值有appendlastmodified两个。

sqoop to hdfs examples

数据库列表

sqoop list-databases \ 
--connect jdbc:mysql://192.168.10.55:3306 \ 
--username root \ 
--password 123456

导入前2行数据

sqoop import --connect jdbc:mysql://192.168.10.55:3306/devaccess \ 
--username root --password 123456--table access \ 
--where 'id<3' --target-dir '/sqoop/devaccess/access'

增量导入,导入3到9行数据

sqoop import --connect jdbc:mysql://192.168.10.55:3306/devaccess \ 
--username root --password 123456 --table access \ 
--where "id > 2 and id < 10" \ 
--target-dir '/sqoop/devaccess/access'  \  
--append

手动增量更新,更新id 大于3的数据(最后一次导入的位置为3000)

sqoop import --connect jdbc:mysql://192.168.10.55:3306/devaccess \ 
--username root --password 123456 --table access \ 
--target-dir '/sqoop/devaccess/access' \ 
--check-column 'id' \ 
--incremental append \ 
--last-value 3000

自动更新,自动导入数据
mysql -query 注意,import 前面有个空格,单独存在一个“–”

sqoop job --create devaccess -- import \  
--connect jdbc:mysql://192.168.10.55:3306/devaccess \ 
--username root --password 123456 \ 
--target-dir '/sqoop/devaccess/access' \ 
--query "select * from access where remote_address='218.26.97.2' and \$CONDITIONS" \ 
--split-by id \ 
--check-column 'id' \ 
--incremental append \ 
--last-value 10000

sqoop job --exec devaccess

可以把该指令设为Linux定时任务

sqoop to hive

类型对应表

MySQL(bigint) --> Hive(bigint)
MySQL(tinyint) --> Hive(tinyint)
MySQL(int) --> Hive(int) 
MySQL(double) --> Hive(double) 
MySQL(bit) --> Hive(boolean) 
MySQL(varchar) --> Hive(string) 
MySQL(decimal) --> Hive(double) 
MySQL(date/timestamp) --> Hive(string)

导入数据库表类型

sqoop create-hive-table \ 
  --connect jdbc:mysql://192.168.10.55:3306/devaccess \ 
  --username root \  
  --password 123456\  
  --table access \ 
  --hive-table access \ 
  --hive-database devaccess

注:hive表中的database要存在

导入前2行数据

sqoop import --connect jdbc:mysql://192.168.10.55:3306/devaccess \
--username root --password 123456 --table access \
--where 'id<3' --target-dir '/warehouse/devaccess/access' \
--hive-import \
--hive-database devaccess \
--hive-table access

未完待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值