集群开发和部署测试

开发环境

1.Windows开发环境的修改
A.环境变量以及文件的添加
    环境变量
    0.需存在:JAVA_HOME
    1.新添加:
            变量:
                HADOOP_HOME 值为 C:\Config\hadoop-common-2.7.1-bin-master\bin  
                HADOOP_USER_NAME    hdfs
            路径:将C:\Config\hadoop-common-2.7.1-bin-master\bin  添加到变量Path中
    添加的文件
        spark-assembly-1.6.0.2.4.0.0-169-hadoop2.7.1.2.4.0.0-169.jar
        hadoop-common-2.7.1-bin-master
    说明--路径对应自己电脑的路径,版本对应线网环境的版本
B.网络的设置:将集群中机器名和IP地址对应--注意用命令ipconfig /flushdns
    C:\Windows\System32\drivers\etc\hosts
2.在生产环境中的配置还需要了解
    生产环境中jar包复制到了-/usr/hdp/2.4.0.0-169/hadoop/lib

本地环境的程序

clone下来之后,
01.首先是环境的设置--
    本地环境是否有程序所需要的提交,例如 JAVA_HOME等
02.接着查看依赖
    是否需要修改pom.xml
    在library中是否有所需要的库--本地开发环境
    <1>add as a maven project
        然后在Maven中reimport
    <2>setup Scala SDK
        添加SDK
        添加spark-assembly-1.6.0.2.4.0.0-169-hadoop2.7.1.2.4.0.0-169
    <3>mark as resource root/以及unmark
    <4> JDK.tool.1.8
03.程序中的package路径是否正确
    以及config所在的路径和内容

集群环境运行问题排查

问题原因所在
    环境问题:   集群的环境
    命令问题:   后缀名是否需要加上,文件路径是否错误,是否有空格;
    jar包问题: 第三方jar包是否打入
                设置文件:设置文件中的集群还是本地
    程序问题:   逻辑问题等
问题的类型:

具体示例
 1.Exception in thread "main" java.io.FileNotFoundException: File /datacenter/data does not exist   
 val hdfs = FileSystem.get(HBaseConfiguration.create() )

 2.Exception in thread "main" java.lang.NoClassDefFoundError: com/alibaba/fastjson/JSONObject
java.lang.NoClassDefFoundError with HBase Scan
解决方式一
解决环境
    原因01
        我们将 Hadoop  classpath 信息添加到 CLASSPATH 变量中
         cd  /etc/hadoop/conf
         cat hadoop-env.sh 配置与hadoop运行环境相关的变量
                export JAVA_HOME=/opt/jdk1.8.0_111/
                export HADOOP_HOME=${HADOOP_HOME:-/usr/hdp/current/hadoop-client}
                export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}${JAVA_JDBC_LIBS}
    原因02
        hadoop中的classpath没有所谓的jar包
            方法一:将第三方jar包复制到集群中每个节点的HADOOP_CLASSPATH的lib文件夹下:eg:/usr/hdp/2.4.0.0-169/hadoop/lib/
                    或者
            方法二:shell命令:将hbase的lib全部加入hadoop_classpath:
                在hadoop-env.sh文件中添加如下:
                        # add
                        for f in $HBASE_HOME/lib/*.jar; do
                          if [ "$HADOOP_CLASSPATH" ]; then
                            export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$f
                          else
                            export HADOOP_CLASSPATH=$f
                          fi
                        done
                        #add
解决方式二       
    在程序中解决
    将所需要第三方的jar包打入到 程序包中        
 3.重新打包过程中出现的错误
C:\Items\Spark_Develop\src\main\java
Error “MANIFEST.MF already exists in VFS” when creating new artifact
http://stackoverflow.com/questions/31189449/error-manifest-mf-already-exists-in-vfs-when-creating-new-artifact

集群位于Linux上的位置

YARN会调用以下的lib-----yarn logs
集群上的库所在位置
  /usr/hdp/
    /usr/hdp/2.4.0.0-169/hbase/lib
    /usr/hdp/2.4.0.0-169/hive/lib
    /usr/hdp/2.4.0.0-169/hadoop/lib
    /usr/hdp/2.4.0.0-169/spark/lib
        spark-assembly-1.6.0.2.4.0.0-169-hadoop2.7.1.2.4.0.0-169.jar
配置文件所在的位置
    /etc/hadoop/conf
            hadoop-env.sh 
            mapred-env.sh
            yarn-env.sh
    /etc/hbase/conf
    /etc/hive/conf
日志文件
    /var/log/hadoop
    /var/log/hadoop-mapreduce
    /var/log/hadoop-yarn
    /var/log/hbase
    /var/log/hive
    /var/log/zookeeper
    /var/log/spark

集群连接设置

在程序内--<注意依赖的包和环境>
HDFS的连接设置
    val HDFS_CONFIG = new Configuration();
    HDFS_CONFIG.set("fs.default.name", getProperties("fs.default.name"));
    val  hdfs = FileSystem.get(HDFS_CONFIG);
    val hdfs = FileSystem.get(HBaseConfiguration.create() 
     HBaseConfiguration.create() 默认会从classpath 中查找 hbase-site.xml 中的配置信息,初始化 Configuration,在集群环境中可以,在本地开发使用上述HDFS_CONFIG的的连接设置
 HBase设置
    //连接设置
    val hbaseConf = HBaseConfiguration.create()
    hbaseConf.set(HConstants.ZOOKEEPER_QUORUM, getProperties("hbase.zookeeper.quorum"))
    hbaseConf.set(HConstants.ZOOKEEPER_ZNODE_PARENT, getProperties("hbase.zookeeper.znode.parent"))
    hbaseConf.set(HConstants.ZOOKEEPER_CLIENT_PORT, getProperties("hbase.zookeeper.property.clientPort"))
    hbaseConf.set(HConstants.MASTER_PORT, getProperties("hbase.master.port"))
    //读取设置--表名--列族
    val columnFamily = "info"
    //设置输入格式和表名
     hbaseConf.set(TableInputFormat.INPUT_TABLE, getProperties(tableName01))
     val hbaseRDD01 = sc.newAPIHadoopRDD(hbaseConf, classOf[TableInputFormat], classOf[ImmutableBytesWritable], classOf[Result])
Hive的设置

        val SparkConf = new SparkConf().set()
        val sc = new SparkContext(SparkConf)
        val hiveCtx = new import org.apache.spark.sql.hive.HiveContext(sc)

blogroll

social