极度嘟嘟咕噜

导航

 

 

hadoop fs -mkdir -p /lpptext

将hadoop本地文件传输到hdfs上

hdfs dfs -put /opt/soft/hivetext.txt /text

在hive中创建数据库

create database lppdata;

创建数据库后根据自己的数据字段进行创建外部表

create external table ods_data(
              name string,
              id int,
              addr string,
              type string,
              rank string,
              acaddr string
              )
            row format delimited fields terminated by '\t'
              location '/warehouse/lppdata/dwd/dwd_data' ;

从hadoop本地文件传输到hive中

load data local inpath '/opt/soft/x.txt' overwrite into table ods_data;

inpath后写的是hadoop本地文件的路径

中文乱码的解决办法

  1. ALTER TABLE ods_data SET SERDEPROPERTIES (‘serialization.encoding’=‘GBK’);

  2. 利用工具将文件的格式转化为utf-8格式

FAILED: 执行hql语句时产生 Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask问题

  • 查看yarn日志

  • 我是从网上百度筛选出对我有用的一个解决办法

  • 执行hadoop classpath,在yarn-site.xml中加如下内容

  • <property> <name>yarn.application.classpath</name>

    <value>classpath(刚才显示的classpath的内容)</value>

    </property>

编写shell脚本

  • 对本次的数据分析由于我得到的数据如下:

 

  • 我想统计出各区的有评级的数据并进行数量的统计

  •  

 具体的是实现过程如下:

  1. ods表(原先的数据)

  2. dwd(经过空数据处理,以及剔除不需要的信息的字段、筛选出已经评级的医院信息)

  3. ads(将生成的已评级的医院数量进行统计,并且进行对应各区相应数量)

  • dwd层先进行创表

 create external table dwd_data(
              name string,
              addr string,
              rank string,
              acaddr string
              )
            row format delimited fields terminated by '\t'
              location '/warehouse/lppdata/dwd/dwd_data' ;
create external table dwd1_data(
              name string,
              addr string,
              rank string,
              acaddr string
              )
            row format delimited fields terminated by '\t'
              location '/warehouse/lppdata/dwd/dwd1_data' ;
  • 编写脚本

 #!/bin/bash

hive_db=lppdata
hive=/opt/module/hive/bin/hive

sql="
insert overwrite table "$hive_db".dwd_data
select * from "$hive_db".ods_data
where name !='none'
and id !='none'
and addr !='none'
and type !='none'
and rank!='none'
and addr!='none'
"
$hive -e "$sql"

保存为ods_data.sh 在当前脚本的目录下赋予该执行权限:chmod +x ods_data.sh 然后进行执行

  • 脚本二 剔除未评级的数据

 #!/bin/bash

hive_db=lppdata
hive=/opt/module/hive/bin/hive

sql="
insert overwrite table "$hive_db".dwd1_data
select * from "$hive_db".dwd_data
and rank!='\u672a\u8bc4\u7ea7'
"
$hive -e "$sql"
  • ads层:主要思路是创建两个表,一个表统计数字,一个表统计区名,再进行表连接生成到一个新的表中

create external table ads1_data(
              addr string              
              )
              row format delimited fields terminated by '\t'
              location '/warehouse/lppdata/ads/ads1_data' ;
create external table ads2_data(
              sum int
              )
            row format delimited fields terminated by '\t'
              location '/warehouse/lppdata/ads/ads2_data' ;
create external table ads3_data(
              addr string,  
              sum int
              )
            row format delimited fields terminated by '\t'
            location '/warehouse/lppdata/ads/ads3_data';
  • 脚本编写

#!/bin/bash

hive_db=lppdata
hive=/opt/module/hive/bin/hive

sql="
insert overwrite table "$hive_db".ads1_data
select   distinct addr from "$hive_db".dwd1_data
"
$hive -e "$sql"
#!/bin/bash

hive_db=lppdata
hive=/opt/module/hive/bin/hive

sql="
insert into table "$hive_db".ads2_data
select   count(addr) from "$hive_db".dwd1_data group by addr
"
$hive -e "$sql"
#!/bin/bash

hive_db=lppdata
hive=/opt/module/hive/bin/hive

sql="
insert overwrite table "$hive_db".ads_data
select * from "$hive_db".ads1_data left join "$hive_db".ads2_data on "$hive_db".ads1_data
"
$hive -e "$sql"

 

posted on 2021-11-15 10:21  极度嘟嘟咕噜  阅读(88)  评论(0)    收藏  举报