Sunday, May 17, 2015

ubuntu 15,jdk1.8上安装 单机hadoop 2.7成功

copy其他人的教程,他是用14+2.6实现,本人用的15+2.7实现,基本无差别
参考 http://blog.csdn.net/shomy_liu/article/details/43027783
注意他里面有点小错

最近需要hadoop,再加上 hadoop这么流行, 就打算开始学习hadoop, 关于hadoop的简介 就不再赘述了,只需先记住, HDFS(Hadoop分布式文件系统), MapReduce(计算模型) 是hadoop的 核心即可。
 首先  hadoop 平台的搭建有三种方式:
  •      单机版
  •      伪分布式版
  •      完全集群分布式          
首先先试着练习来安装 单机版hadoop

一、安装环境
          Ubuntu 15
         hadoop 2.7
         java jdk 1.8
        openssh

二、配置用户、组
     1, 创建hadoop组      
            在终端执行:
            sudo addgroup hadoop
           如下图
        2,创建hadoop用户
             在hadooop用户组添加hadoop用户
             sudo adduser -ingroup hadoop hadoop表示在hadoop 组 添加hadoop 用户
  
      3,为hadoop增加root权限
             赋予hadoop  root权限,就相当于每次执行权限指令时候,只需sudo 就可以,方法如下,修改/etc/sudoers, 如下图,增加              hadoop    ALL=(ALL:ALL) ALL,  执行  sudo  gedit /etc/sudoers  修改之后,如下图
         
         保存退出即可

三、安装SSH 服务
        首先SSH是一个安全的传输协议,可以进行远程登录,hadoop使用ssh 协议来进行数据通信
        建议先  切换到 刚刚 建立的 hadoop 用户下进行操作:  su hadoop
       1,安装ssh 服务
             sudo apt-get install openssh-server
         2,  建立ssh无密码登录本机
            执行  ssh-keygen 生成密钥  中间需要几个回车
           
        然后可以试试 ssh localhost 需要输入密码, 比较麻烦。如果把 key 拷贝到远程机器上,下次ssh链接的时候就无需输入密码登陆了   :  执行  ssh-copy-id  localhost   之后, 在继续ssh localhost就无需输入密码了。 然后在 执行exit 返回到 hadoop用户
如下:
 

四、安装java jdk
         运行hadoop ,jdk 是必需 的。 安装jdk 也比较容易;可以 自己选择版本下载手动安装, 也可以直接apt-get   ,这里为了方便,就直接安装apt-get的openjdk了
        1,直接 执行  sudo apt-get openjdk-7-jdk
        2,查看jdk是否安装完成   java -version
                  

五、配置安装hadoop
         hadoop 各个版本差别挺大, 但是作为练习 就直接用了最新版 2.6.0
        1,安装解压
           官网直接下载就好http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.6.0/
          一般是安装到 /usr/local , 假设下载的tar.gz 在downloads ,将其移动到 /usr/local :
          sudo cp hadoop-2.6.0.tar.gz  /usr/local
           之后进入/usr/local 目录下: 解压sudo tar -zxvf haddoop-2.6.0.tar.gz    
          解压之后 在该目录下 会多出一个 hadoop-2.6.0的目录,为了方便,一般 是重命名为hadoop:
          sudo  mv  hadoop-2.6.0  hadoop
         这就算安装好了,下面就是修改配置文件了
      2,修改配置文件(如果java是默认安装的话,不需要修改jdk目录)
           首先修改 hadoop文件夹的权限用户:  sudo chown -R hadoop:hadoop  hadoop
           修改/.bashrc文件,添加环境变量
            首先查看自己的jdk目录:update-alternatives --config java如下:
             
          我们只需要到根目录 也就是 :/usr/lib/jvm/jdk1.7.0_71 
          然后就是修改 hadoop的 hadoop-env.sh 
         sudo gedit /etc/hadoop/hadoop-env.sh
         修改export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_71
         如下:
           
保存退出  ,至此,单机版的配置 就基本完成了。 下面就是测试了:
  
六、测试单机版hadoop        
    1,首先格式化
           bin/hadoop  namenode -format
        之后出现: 表示格式化成功
        
   
  2、运行测试程序
        在hadoop目录下,hadoop-examples-2.6.0.jar这个是测试程序,里面包含了很多测试用的代码,我们运行一个经典的,wordcount程序: 就是 统计单词频率的一个程序, 首先我们需要建立一个input 文件夹,作为输入
    sudo mkdir input  
    然后随便复制文本进去: 这里就用hadoop目录下的  README.txt 作为测试样本。 
   sudo  cp README.txt input
   然后执行jar 包 运行样例:
    bin/hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.6.0-sources.jar  org.apache.hadoop.examples.WordCount input output
   
   结果如下:
   
  稍等运行一会,会在/home/hadoop/下生成一个output目录,里面有part-r-00000_SUCCESS两个文件,看到_SUCCESS就知道已经成功了,打开part-r-00000看看,每个单词的出现次数都给你统计好了吧。
    执行 cat output/* 可以查看 单词的出现次数~ 
 
  
   至此, 单机版的hadoop 已经完成, 可以写自己的程序; 虽然单机版并不能体现云计算的优势 , 在实际应用中并没有什么意义 , 但是在程序的测试与调试过程中 , 它们还是很有意义的 。

Saturday, May 16, 2015

MySQL Python 教程

Ubuntu
$ apt-cache search MySQLdb
$ sudo apt-get install python-mysqldb

打印版本号

#!/usr/bin/python
# -*- coding: utf-8 -*-

import _mysql
import sys

con = None

try:

    con = _mysql.connect('localhost', 'testuser', 
        'test623', 'testdb')
        
    con.query("SELECT VERSION()")
    result = con.use_result()
    
    print "MySQL version: %s" % \
        result.fetch_row()[0]
    
except _mysql.Error, e:
  
    print "Error %d: %s" % (e.args[0], e.args[1])
    sys.exit(1)

finally:
    
    if con:
        con.close()

创建表,插入数据


#!/usr/bin/python
# -*- coding: utf-8 -*-

import MySQLdb as mdb
import sys

con = mdb.connect('localhost', 'testuser', 'test623', 'testdb');

with con:
    
    cur = con.cursor()
    cur.execute("CREATE TABLE IF NOT EXISTS \
        Writers(Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(25))")
    cur.execute("INSERT INTO Writers(Name) VALUES('Jack London')")
    cur.execute("INSERT INTO Writers(Name) VALUES('Honore de Balzac')")
    cur.execute("INSERT INTO Writers(Name) VALUES('Lion Feuchtwanger')")
    cur.execute("INSERT INTO Writers(Name) VALUES('Emile Zola')")
    cur.execute("INSERT INTO Writers(Name) VALUES('Truman Capote')")

Windows 下安装 Ubuntu 双系统

  1. 准备磁盘空间
    在磁盘管理中将要分配给 Ubuntu 的卷删除。
  2. 设置 iso 文件
    • 将镜像下的 casper 文件夹下的 vmlinuz 和 initrd.lz 解压出来,并复制在 C 盘根目录下;
    • 将准备好的 iso 镜像文件拷贝到某盘根目录下(如D盘);
  3. 安装 EasyBCD 软件
  4. 设置向导
    • 打开 EasyBCD 软件,选择 Add Entries,选 NeoGrub,然后点 Install,接着是Configure
    • 然后就会弹出 menu.lst 文件,我们要编辑这个文件,因为系统就是这个文件找到我们的 Ubuntu 的;
    • 把下面的英文复制到 menu.lst 文件末尾
         title Install Ubuntu
         root (hd0,0)
         kernel (hd0,0)/vmlinuz boot=casper iso-scan/filename=/ubuntu-11.10-i386.iso ro quiet splash locale=zh_CN.UTF-8
         initrd (hd0,0)/initrd.lz
      
      特别注意: ubuntu-11.10-i386.iso 是 Ubuntu 系统 iso 镜像文件的名字,需要根据所用版本进行更改; 对于有的电脑上你的第一个盘符并不是C盘,在磁盘管理中可以看出,所以安装时需将 (hd0,0) 改为 (hd0,1)【假设为第二个】; 64 位 Ubuntu 解压出来的文件为 vmlinuz.eti,因此须将上述代码中的 vmlinuz 改为vmlinuz.eti
  5. 重启
    重启,你就会看到有2个启动菜单给你选择,我们选择第2个 Grub 这个,选择install,然后等待一段时间,就会进入 Ubuntu 桌面了。
  6. 卸载镜像
    进入桌面之后,先在终端输入:
      $ sudo umount -l /isodevice
    
    这一命令取消掉对光盘所在驱动器的挂载,否则分区界面找不到分区。
  7. 安装
    一路 next 之后在安装类型界面,我们用自定义,即可以自定义分区的安装方法。
    选择在 Win7/8 中删除的空闲空间(以 40G 左右为例),点击创建,点击添加:
    具体分区如下(仅作参考): 分配 20G 给根目录,即 / ext4 分配 18G 给 /usr ext4 分配 120M 给 /boot ext4 分配 8G 给 /home ext4 分配 2G(所有剩下的,约为 2G)给交换空间 swep
    关于安装启动引导器的设备,会影响 Window 和 Ubuntu 的引导关系,此处默认即可。
  8. 重启
    注意:若重启发现原来 Windows 进不去了,打开终端输入命令:
      $ sudo gedit /etc/default/grub
    
    修改 GRUB_TIMEOUT="10",然后在终端中输入:
      $ sudo update-grub update
    
    命令会自动找到 Windows 启动项,并且自动更新 /boot/grub/grub.cfg 文件,这样重启就能进 Windows 了。
  9. 更改启动顺序将 Windows7/8 设为默认启动项
    若重启,发现 Windows 不是第一个启动项,则
      $ sudo mv /etc/grub.d/30_os-prober /etc/grub.d/06_os-prober
    
    即将 /etc/grub.d/30_os-prober 改名为 06_os-prober,再执行: $ sudo update-grub 即可。
  10. 进入 windows 进行善后工作
    最后进入 Window7/8,打开 EasyBCD 删除安装时改的 menu.lst 文件,按 Remove 即可。
    然后去我们的 C 盘删除 vmlinuzinitrd.lz 和系统的 iso 文件。
  11. Let's begin Linux。

python 做网络爬虫下载数据

#!usr/bin/python

import re
import urllib

def getHtml(url):
    page=urllib.urlopen(url)
    html=page.read()
    return html

def getImg(html):
    reg=r'(http://cache.+)" alt'
    imgre=re.compile(reg)
    imglist=re.findall(imgre,html)
    x=10
    for imgurl in imglist:
        trimurl=imgurl.replace("amp;","")
        urllib.urlretrieve(trimurl, '%s.jpg' % x)
        x=x+1
        print trimurl
   

html=getHtml("http://www.photos.com/prints/photographers/the-complete-slim-aarons-collection")

getImg(html)

Friday, May 15, 2015

ubuntu下创建eclipse桌面快捷方式

1.桌面目录创建一个名为“eclipse.desktop”的文件
并添加以下内容:

[Desktop Entry]
Encoding=UTF-8
Name=Eclipse Platfrom
Comment=Eclipse IDE
Exec=/home/jason/eclipse/eclipse
Icon=/home/jason/eclipse/icon.xpm
Terminal=false
StartupNotify=true
Type=Application
Categories=Application;Development;



注意:
1 Exec=/home/jason/eclipse/eclipse  
2 Icon=/home/jason/eclipse/icon.xpm  
这个地方要修改为你的安装目录。
2.然后给该文件赋权 ,运行“chmod u+x eclipse.desktop“命令即可。
3.直接cp上面代码的朋友注意了,cp回去编辑的时候注意去掉每行后面的空格。

Wednesday, May 13, 2015

Java Notes

The output of Java compiler is not executable code but byte-code to be executed by JVM.
multitasking: process-based and thread-based
for java multi-thread programming

Friday, May 1, 2015

nginx负载平衡

upstream site {
server localhost:85;      //apache服务器
server localhost:86;
}

    server {
       listen         80;
       server_name    localhost;
       return         301 https://$server_name$request_uri;   //重写路径
}



server {
       
      listen 443 ssl;                                   //监听443端口 ,所有80转向到443
    server_name localhost;

    ssl on;
    ssl_certificate         server.crt;                  //ssl配置文件
    ssl_certificate_key    server.key;
   # ssl_trusted_certificate /etc/nginx/ssl/example.com/ca-certs.pem;

    location / {
        proxy_pass http://site;                                   //注意不用https
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
}

利用htmlunit和webdriver读取网页数据

先说.net的,需要进入 using mshtml;

           System.Net.WebClient webClient = new System.Net.WebClient();
              IWebDriver driver = new FirefoxDriver();
            driver.Navigate().GoToUrl("http://course.xxx.edu/");
            String pageSource = driver.PageSource;
这种比较笨重,需要启动firefox读取


对java的,需要使用htmlunit包
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_31);
webClient.getOptions().setJavaScriptEnabled(true);
//webClient.getCookieManager().setCookiesEnabled(true);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.getOptions().setThrowExceptionOnScriptError(false);
   webClient.getOptions().setCssEnabled(false);

   HtmlPage page =
webClient.getPage("http://course.xxx.edu");
 
webClient.waitForBackgroundJavaScript(5000);


String text=page.asText();
/*String patternString = "Available Seats:";
Pattern pattern = Pattern.compile(patternString);

        Matcher matcher = pattern.matcher(text);*/
        int index=text.lastIndexOf("Available Seats");
        String seats=text.substring(index+17, index+19).trim();

int numOfSeats=Integer.parseInt(seats);
System.out.println(numOfSeats);


如何利用c#发送gmail
public static void SendMail(String s)
        {
            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
            mail.From = new MailAddress("sender@gmail.com");
            mail.To.Add("receiver@gmail.com");
           // mail.To.Add("m2@gmail.com");
            mail.Subject = "good news: "+s;
            mail.Body += " <html>";
            mail.Body += "<body>";
            mail.Body += "<table>";
            mail.Body += "<tr>";
            mail.Body += "<td>User Name : </td><td> HAi </td>";
            mail.Body += "</tr>";

            mail.Body += "<tr>";
            mail.Body += "<td>Password : </td><td>aaaaaaaaaa</td>";
            mail.Body += "</tr>";
            mail.Body += "</table>";
            mail.Body += "</body>";
            mail.Body += "</html>";
            mail.IsBodyHtml = true;
            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential("sender@gmail.com", "mypassword");
            SmtpServer.EnableSsl = true;
            SmtpServer.Send(mail);

        }