Shell 脚本 采集天气数据

Submitted by Lizhe on Thu, 04/06/2017 - 23:38

 

这几天瞎看hadoop, 但是没有数据可以用, 所以考虑用shell 在服务器上采集点天气信息

先写一个脚本用curl命令简单取一下信息

curl "http://cdn.weather.hao.360.cn/api_weather_info.php?app=hao360&_jsonp=smartloaddata101190101&code=101070201" >> /data/lzcronscripts/data.txt

 

可以得到如下数据

Mapreduce java 例子(1)

Submitted by Lizhe on Thu, 04/06/2017 - 17:16

 

这个例子来源于<Hadoop权威指南>, 随便在百度上一找就一堆,这里只是写个注释

Map类

package org.jediael.hadoopDemo.maxtemperature;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class MaxTemperatureMapper extends
        Mapper<LongWritable, Text, Text, IntWritable> {
    private static final int MISSING = 9999;

Cron

Submitted by Lizhe on Wed, 04/05/2017 - 16:36

 

通过crontab -e命令编辑crontab任务,增加内容如下:

*/1 * * * * /dd/shell/test1.sh
*/1 * * * * /dd/shell/test2.sh

通过sed删除

sed -i '/test2.sh/d' /var/spool/cron/root   

Hadoop eclipse环境

Submitted by Lizhe on Tue, 04/04/2017 - 14:06

https://github.com/winghc/hadoop2x-eclipse-plugin/blob/master/release/hadoop-eclipse-plugin-2.6.0.jar

iptables -t nat -A DOCKER -p tcp --dport 9000 -j DNAT --to-destination 172.17.0.19:9000

iptables -t nat -A DOCKER -p tcp --dport 9001-j DNAT --to-destination 172.17.0.19:9001

iptables -A DOCKER ! -i docker0 -o docker0 -p tcp --dport 9000 -d 172.17.0.2 -j ACCEPT

iptables -A DOCKER ! -i docker0 -o docker0 -p tcp --dport 9001 -d 172.17.0.2 -j ACCEPT

Hadoop环境配置2

Submitted by Lizhe on Mon, 04/03/2017 - 18:56

安装jdk1.8

yum  -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel 

安装wget

yum install wget

下载hadoop

wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.6.5/hadoop-2.6.5.tar.gz

重命名然后解压

mv hadoop-2.6.5.tar.gz hadoop.tar.gz

tar -zxvf hadoop.tar.gz

 

http://blog.csdn.net/emptyset110/article/details/49835101

这里我是把hadoop的根路径放在了

/download/hadoop-2.6.5

Hadoop环境配置1

Submitted by Lizhe on Mon, 04/03/2017 - 00:15

打算按集群的模式做,所以先建几个docker容器

docker run --name master -p 8088:8088 -p 50070:50070  -i -t 2785d012ae3e

docker run --name slave1 -i -t 2785d012ae3e

docker run --name slave2 -i -t 2785d012ae3e

然后是让这几台server互相免密码通信

docker 镜像的centos竟然没带ssh, 先装ssh ( 在所有容器上 )

yum -y install openssh-server openssh-clients

去掉/etc/ssh/sshd_config其中2行的注释,每台服务器都要设置,
#RSAAuthentication yes
#PubkeyAuthentication yes

同时打开root远程登录

PermitRootLogin yes #root能使用ssh登录

在3台主机下

ssh-keygen -t rsa

然后直接全部回车,空密码

Commands

Submitted by Lizhe on Sat, 04/01/2017 - 16:19

docker pull centos

docker pull daocloud.io/library/centos:latest

docker run --name test -i -t 2785d012ae3e

ctrl p q

 

 

 

Lambda表达式

Submitted by Lizhe on Fri, 03/31/2017 - 16:21

 

在正式了解Lambda表达式之前我们先谈谈函数式接口

简单来说,函数式接口是只包含一个方法的接口。

比如Java标准库中的java.lang.Runnable和 java.util.Comparator都是典型的函数式接口。

java 8提供 @FunctionalInterface作为注解,这个注解是非必须的,只要接口符合函数式接口的标准(即只包含一个方法的接口),虚拟机会自动判断, 但 最好在接口上使用注解@FunctionalInterface进行声明,以免团队的其他人员错误地往接口中添加新的方法。

Java中的lambda无法单独出现,它需要一个函数式接口来盛放,lambda表达式方法体其实就是函数接口的实现.

先用Comparator接口写个例子

打开Comparator接口的源码可以看到如下内容, 这是一个函数式接口

@FunctionalInterface
public interface Comparator<T> {

....

}

 

然后我们通过Lambda表达式给它添加一个实现

Cost Based Optimizer 基于成本的SQL优化器

Submitted by Lizhe on Wed, 03/29/2017 - 16:53

Oracle 自7开始引入了CBO.

Oracle会根据cpu,内存以及I/O的开销来进行SQL优化

可选择率是CBO的一个核心概念

1. 可选择率

可选择率 = 指定谓词返回的结果集记录数/未使用谓词返回的结果集记录数

取值范围是 0到1 , 值越小 表明 可选择性 越好

2. 可传递性

2.1 简单谓词传递

2.2 连接谓词传递

2.3 外链接谓词传递

实际上就是 a1=a2 and a1=10 等价于 a1=10 and a2=10

 

Rule Based Optimizer 基于规则的SQL优化器

Submitted by Lizhe on Mon, 03/27/2017 - 17:56

 

待执行的SQL语句进入数据库系统后都会进入查询优化器进行查询转换.

在Oracle 10g之前, Oracle会默认使用RBO规则

数据库会将查询条件分成15个等级, 通过判断条件(动作)的级别高低来决定那个谓词被优先执行

例如 基于rowid的查询级别是最高的为1, 全表扫描的执行级别最低为15

基于RBO优化器的一个明显缺点在于, 依靠硬编码来确定的规则很难被动态改变, 编写SQL语句的时候需要十分注意

这里如果你跟我一样使用的是10g之后的版本,我们需要使用下面的命令将优化器暂时改成RBO ( 只对当前session有效,不用再改回来)

alter session set optimizer_mode='RULE';

然后我执行一个执行计划

 

EXPLAIN PLAN FOR select * from INO_OUTAGES.OUTAGE where SUBCATEGORY='NBN Outage';
SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));