edi部署过程笔记

来源:互联网 发布:js 插件写法 编辑:程序博客网 时间:2024/06/04 23:29

TODO:------------------------------------------------------
1.查找hive数据入库方式;
3.多客户端beeline连接远端hive hiveserver2,并调研其安全认证方式;sslTrustStore;
7.



hadoop:------------------------------------------------------
1.hadoop dfsadmin –refreshNodes,这样会强制重新加载配置.
2.hadoop dfsadmin -report可以查看到现在集群上连接的节点。
3.在hdfs-site.xml文件excludes文件内容为每个需要下线的机器,一行一个。这个将阻止他们去连接NameNode。
4.要启动jobhistory,需要在namenode上执行命令:sbin/mr-jobhistory-daemon.sh start historyserver 。
5.独立启动
    "$bin"/hadoop-daemon.sh --config $HADOOP_CONF_DIR start namenode $nameStartOpt
    "$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR start datanode $dataStartOpt
    "$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR --hosts secondarynamenode start secondarynamenode



linux :------------------------------------------------------
1.正则判断:if [[ $line =~ [1-9]$ ]],[[后面一定要有空格。
2.tar压缩解压:
    1).tar调用gzip:tar -czf all.tar.gz *.jpg ,-z这个参数来调用gzip。解压tar -xzf all.tar.gz 。
    2).tar调用bzip2:tar -cjf all.tar.bz2 *.jpg,解压 tar -xjf all.tar.bz2。
3.sudo cat /var/log/upstart/networking.log
4./bin/bash^M: bad interpreter: No such file or directory,原因:是window系统格式    sed -i 's/\r$//' xxx.sh
5.脚本明文密码加密:
    第1种:
    echo "gtalk@gmail.com" |base64 -i    //得到:Z3RhbGtAZ21haWwuY29tCg==
    echo "Z3RhbGtAZ21haWwuY29tCg==" |base64 -d    //得到:gtalk@gmail.com
    第2种:
    echo "ibase=16; `echo 'gtalk@gmail.com' |xxd -ps -u`" |bc    //get 137514765985002236391382606438443478282
    dc -e 137514765985002236391382606438443478282PAnything        //get gtalk@gmail.com
6.linux 定时执行用crontab -e编辑 如: */5 * * * * ./mysql_db_bak.sh edi edi 1870356536615775580426
7.ls block0[^0] 显示除block00之外的所有文件
8.$?==0表示上一条命令执行成功。$#是shell后参数的个数。
9.判断路径不存在 if [ ! -d "path" ];then ,判断文件大小为0 if [ -z ]
-----------------------------------------------------------------



sqoop1:------------------------------------------------------
1.mysql2hdfs:sqoop import -m 1 --connect jdbc:mysql://hadoop-1/test1 --table person --username hive --password hive --target-dir /sqoop_mysql/person

2.mysql2hive:sqoop import -m 1 --connect jdbc:mysql://hadoop-1/test1 --table person --username hive --password hive --fields-terminated-by "\t" --lines-terminated-by "\n" --hive-import --hive-table hive.person --delete-target-dir --null-string '\\N' --null-non-string '\\N'

3.hive2mysql:sqoop export --connect jdbc:mysql://hadoop-1/test1 --username hive --password hive --table userid --export-dir /hua/hive/db_hive/userid/dt=2014-09-23/sex=1/* --input-fields-terminated-by '\0001' --null-non-string '0' --null-string '0'

4.list all table in the db : sqoop list-tables --connect jdbc:mysql://hadoop-1/test1   --username hive --password hive


sqoop2:------------------------------------------------------
1.下载-bin-hadoopXXX.tar.gz的版本,解压;
2.配置sqoop/server/conf/配置文件,主要是指定hadoop的配置文件路径和hadoop的lib jars;
3.配置到.bashrc;
4.用本地模式启动./sqoop2-shell;远程的话用 set server --host your.host.com --port 12000 --webapp sqoop;
5.创建from\to的link,指定这些连接的帐号密码;用show connector;查看连接器编号,用create link -c 2(编号)创建;
6.创建job; create job -f 1 -t 2,即from link 1 to link 2;
7.执行job,start job -j 1;
8.目前不支持直接导入到hive,先到hdfs,在手动load,导入也一样。



----------------------------------------------------------------------------------------------

一、hive服务------------------------------------------------------
1.使用hive --service hiveserver2 & 静默启动hive的后台Thrift服务,默认监听10000端口;
2.用hiveserver2的客户端beeline使用服务,用hive --service beeline jdbc:hive2://localhost:10000连接hiveserver2;
3.用beeline命令在客户端操作远端的hive。
4.如果有备援server可以用如下方式连接,将顺序尝试host1、host2得到成功的连接;
    jdbc:hive2://<host1>:<port1>,<host2>:<port2>/dbName;sess_var_list?hive_conf_list#hive_var_list
5.hadoop-all+hive+mysql正常可运行VM环境:2G,2*2 CPU;
6.Apache Eagle -eBay开源分布式实时hadoop安全方案;
7.查出除了ds和hr的列:SELECT `(ds|hr)?+.+` FROM sales。
8.hiveQL的子查询一定要有别名。
 $HIVE_HOME/bin/hive --hiveconf hive.root.logger=INFO,console
hive默认查询结果里面是只显示值,但是我们有时候需要知道对应关系,比如第一个值代表userid,那么我们需要显示出来,所以我们可以进行下面的操作
hive> set hive.cli.print.header=true;
hive> set hive.cli.print.row.to.vertical=true;
hive> set hive.cli.print.row.to.vertical.num=1;
之后再进行select * from table ,那么我们就会看到相关的列名显示

hive UDF:------------------------------------------------------
//1.编写UDF class 得到jar;
//2.shell>hive
//3.hive>add jar xx.jar;
//4.hive>create temporary function udfFunctionName as 'com.hrj.hive.udf.helloUDF';
//5.use db;
//6.使用udfFunctionName方法。

7.Hive有个bug:不支持ASCII大于128的字符作为字段分隔符,上图红色框中的一句话启发了我:在java中,可以使用负数来表示大于128的分隔符。然后我就找到€的unicode码是0x80,它对应的二进制是10000000,这个二进制如果是表示负数的话对应-128,我就用‘\-128’作为分隔符,执行下面的sql后,再次导入数据居然成功了,嘿嘿。
8.hive导出表数据到本地用insert overwrite local directory '/opt/data/testdata' select * from comms;注意没有into.如果目标地址不存在则没有生成文件,并且没有提示。不同的表要指定不同的路径,不然文件会被覆盖。
9.查询模糊字段 SELECT `(ds|hr)?+.+` FROM sales




edi:--------------------------------------
如果报字典文件找不到:找是相对与hive命令发起的linux路径。如在/opt/下启动hive命令,则在找/opt/dicts/categoryDicts.txt


hadoop jar /opt/running/hadoop-2.6.0/share/hadoop/tools/lib/hadoop-streaming-2.6.0.jar \
    -D mapreduce.job.reduces=0 \
    -D mapreduce.job.maps=10 \
    -input "/tmp/t1" \
    -mapper wc \
    -output /tmp/o1 \
    -reducer /usr/bin/wc


--------------------------------------
mysql:
多个参数的分隔符是这样的&amp;
<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://HadoopMySQL:3306/hive?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf-8</value>
    <description>JDBC connect string for a JDBC metastore</description>
</property>


0 0