美文网首页
Hive + Sqoop + MySQL + Spark

Hive + Sqoop + MySQL + Spark

作者: 予早 | 来源:发表于2018-12-22 17:31 被阅读0次
    1. 安装 Hive +Sqoop+MySQL+Spark
    2. 先将 system_logs.sql 导入 MySQL,使用 Sqoop 将 MySQL 中的数据导入 Hive
    3. 使用 spark 读取 Hive 中的数据,完成以下要求:
      • 使用 Spark 分别计算 Hive 数据中 params 字段空值和不含空值的 IP TOP5
      • 使用 Spark 统计每月访问次数最多的日期

    1. 安装Hive +Sqoop+MySQL+Spark

    1. mysql的安装不再赘述

    2. 安装hive

    wget http://mirror.bit.edu.cn/apache/hive/hive-3.1.1/apache-hive-3.1.1-bin.tar.gz
    tar zxvf apache-hive-3.1.1-bin.tar.gz
    mv apache-hive-3.1.1-bin hive
    # 修改配置
    cp hive-default.xml.template hive-site.xml
    # 下载mysql jar包
    cp mysql-connector-java-5.1.46-bin.jar hive/lib
    

    编辑hive-site.xml:

    <configuration>
            <property>
                    <name>javax.jdo.option.ConnectionURL</name>
                    <value>jdbc:mysql://39.96.19.70:8806/hive</value>
            </property>
            <property>
                    <name>javax.jdo.option.ConnectionDriverName</name>
                    <value>com.mysql.jdbc.Driver</value>
            </property>
            <property>
                    <name>javax.jdo.option.ConnectionUserName</name>
                    <value>jie</value>
            </property>
            <property>
                    <name>javax.jdo.option.ConnectionPassword</name>
                    <value>1</value>
            </property>
            <property>
                    <name>hive.metastore.schema.verification</name>
                    <value>false</value>
            </property>
    </configuration>
    
    1. 安装sqoop:
    wget http://mirror.bit.edu.cn/apache/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
    tar zxf  sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
    mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop
    

    编辑sqoop-env.sh:(没有安装的注释就好)

    #Set path to where bin/hadoop is available
    export HADOOP_COMMON_HOME=/opt/bigdata/hadoop/hadoop-2.7.3
    
    #Set path to where hadoop-*-core.jar is available
    export HADOOP_MAPRED_HOME=/opt/bigdata/hadoop/hadoop-2.7.3
    
    #set the path to where bin/hbase is available
    #export HBASE_HOME=
    
    #Set the path to where bin/hive is available
    export HIVE_HOME=/opt/bigdata/hadoop/hive
    
    #Set the path for where zookeper config dir is
    #export ZOOCFGDIR=
    

    测试:

    sqoop list-databases --connect jdbc:mysql://172.17.41.83:8806/bdp --username jie --password 1
    
    1. 安装spark
    wget http://mirror.bit.edu.cn/apache/spark/spark-2.4.0/spark-2.4.0-bin-hadoop2.7.tgz
    tar zxf spark-2.4.0-bin-hadoop2.7.tgz
    mv spark-2.4.0-bin-hadoop2.7 spark
    vim spark/conf/spark-env.sh
    

    编辑spark-env.sh:

    JAVA_HOME=/opt/bigdata/hadoop/jdk1.8.0_191
    SCALA_HOME=/opt/bigdata/hadoop/scala
    HADOOP_HOME=/opt/bigdata/hadoop/hadoop-2.7.3
    HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    SPARK_MASTER_IP=master
    SPARK_MASTER_PORT=7077
    SPARK_MASTER_WEBUI_PORT=8180
    SPARK_WORKER_CORES=1
    SPARK_WORKER_MEMORY=1g 
    SPARK_WORKER_PORT=7078
    SPARK_WORKER_WEBUI_PORT=8181
    SPARK_WORKER_INSTANCES=1
    
    #export SPARK_DIST_CLASSPATH=$(/opt/bigdata/hadoop/hadoop-2.7.3/bin/hadoop classpath)
    

    vim spark-defaults.conf:

    spark.master                     spark://master:7077
    

    vim slaves:

    slave1
    slave2
    
    #复制hive配置到conf中
    cp hive/conf/hive-site.xml spark/conf/hive-site.xml
    # 复制mysql jar包到spark jars中
    cp hive/lib/mysql-connector-java-5.1.46-bin.jar spark/jars
    

    运行测试:./bin/run-example SparkPi

    image.png
    1. 导入环境变量
    export JAVA_HOME=/opt/bigdata/hadoop/jdk1.8.0_191
    export HIVE_HOME=/opt/bigdata/hadoop/hive
    export SQOOP_HOME=/opt/bigdata/hadoop/sqoop
    export SPARK_HOME=/opt/bigdata/hadoop/spark
    export HADOOP_HOME=/opt/bigdata/hadoop/hadoop-2.7.3
    export HADOOP_COMMON_HOME=/opt/bigdata/hadoop/hadoop-2.7.3
    export HADOOP_CONFIG_HOME=$HADOOP_HOME/etc/hadoop
    export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$SQOOP_HOME/bin:$SPARK_HOME/bin:$PATH
    
    1. 启动环境
    ./hadoop-2.7.3/sbin/start-sll.sh
    ./spark/sbin/start-all.sh
    

    2. 先将 system_logs.sql 导入 MySQL,使用 Sqoop 将 MySQL 中的数据导入 Hive

    1. 将sql文件上传到云主机 rz -E
    2. 进入数据库:mysql -h172.17.41.83 -P8806 -ujie -p1
    -- 创建数据库bdp
    create database bdp;
    use bdp;
    -- 导入sql
    source system_logs.sql
    
    1. 使用Sqoop将数据导入Hive
    sqoop import --connect jdbc:mysql://39.96.19.70:8806/bdp --username jie --password 1 --table system_logs \
    --target-dir /bigdata/data/sqoop/system_logs \
    --delete-target-dir \
    --fields-terminated-by '\t' \
    --direct 
    

    查看导入的数据 hadoop fs -cat /bigdata/data/sqoop/system_logs/* | head

    打开hive,导入数据

    create database bdp;
    drop table if exists bdp.system_logs;
    CREATE TABLE bdp.system_logs (
      id int,
      ip string,
      username string,
      visitrecord string,
      visittime TIMESTAMP,
      method string,
      params string,
      clusterid int
    ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' ;
    
    load data inpath '/bigdata/data/sqoop/system_logs' into table bdp.system_logs ;
    select * from bdp.system_logs limit 10;
    

    参考:https://www.cnblogs.com/xuyou551/p/7998846.html

    1. 使用spark计算
      打开spark-shell


      image.png

    原因:内存不足

    增加内存后重新打开:


    image.png
    import org.apache.spark.sql.hive.HiveContext
    val hiveCtx = new HiveContext(sc)
    
    // 使用 Spark 分别计算 Hive 数据中 params 字段空值和不含空值的 IP TOP5 
    val df=hiveCtx.sql("select distinct ip from bdp.system_logs where params = 'NULL' limit 5").collect().foreach(println)
    val df=hiveCtx.sql("select distinct ip from bdp.system_logs where params != 'NULL' limit 5").collect().foreach(println)
    // 使用 Spark 统计每月访问次数最多的日期 
    hiveCtx.sql("select date_format(visittime, 'y-MM') as m, day(visittime) as d, count(ip) as c from bdp.system_logs group by m,d order by m,c desc limit 100").dropDuplicates(Seq("m")).show()
    

    报错:


    图片.png

    步骤 1 执行命令退出安全模式:hadoop dfsadmin -safemode leave
    步骤 2 执行健康检查,删除损坏掉的block。 hdfs fsck / -delete

    正确结果
    image.png

    附:开机后如何打开hadoop&spark

    分别开启3个容器


    image.png

    分别进入3个容器开启sshd服务,示例:


    image.png
    进入master容器,打开hadoop:
    image.png

    相关文章

      网友评论

          本文标题:Hive + Sqoop + MySQL + Spark

          本文链接:https://www.haomeiwen.com/subject/czhikqtx.html