Hadoop1.x版本升級Hadoop2.x

引言

隨著企業數據化和Hadoop的應用越加廣泛,hadoop1.x的框架設計越來越無法滿足人們對需求,Apache一直在對Hadoop1.x進行修改,最后出了新一代的Hadoop2.x從業界使用分布式系統的變化趨勢和 hadoop 框架的長遠發展來看,MapReduce 的 JobTracker/TaskTracker 機制需要大規模的調整來修復它在可擴展性,內存消耗,線程模型,可靠性和性能上的缺陷。為從根本上解決舊 MapReduce 框架的性能瓶頸,促進 Hadoop 框架的更長遠發展,從 0.23.0 版本開始,Hadoop 的 MapReduce 框架完全重構,發生了根本的變化。新的 Hadoop MapReduce 框架命名為 MapReduceV2 或者叫 Yarn

?

一 hadoop1.0版本與2.0版本的差異

1.1 HDFS之間的差異

1.1.1 ?Hadoop1.x

在Hadoop1.x中,HDFS的采用Masters/Slaves的方式設計集群,通過NameNode和DataNode的方式管理集群。在整個Hadoop1.x HDFS中分為Namespace和BlockStorageServer兩個部分。其中Namespace完全分布在NameNode節點中,Namespace其中包括了所有文件的元數據、images鏡像和edits文件等。而BlockStorageServer分布則是分布在NameNode節點和Datanode節點上的,在NamNodee節點中存放了所有的Block與DataNode節點之間的對應關系。而在Block的內容數據則是在DataNode節點中分布式存放著。如圖1,Hadoop1.x版本HDFS示意圖所示。

wKioL1cYPTnhkefRAABMis6L2jQ145.png?

圖1 ?Hadoop1.x版本HDFS示意圖

弊端:

1)因為NameNode節點是整個集群的中心,一旦NameNode發生宕機,將會導致整個集群的癱瘓,直到NameNode被重啟以后問題才被解決。

2)NameNode節點的個數只有一個,單機的性能是有限的,并且NameNode中存放著有關DataNode節點的信息,因此在理論上無法實現橫向無限性增加DataNode節點,這也就是為什么有NameNode最多支持4000個節點的由來。

1.1.2 ?Hadoop 2.x

Hadoop2.x實現聯邦HDFS,即多個NameNode節點并存,并且每一個NameNode節點管理一個Namespace,如圖2,Hadoop2.x的HDFS示意圖所示。

wKiom1cYPKuTWTdlAABlfTAUsro087.png?

圖2 Hadoop2.x的HDFS示意圖

Block Pool:block池,一個NameNode管理的所有的block節點,一個NameNode節點和去的Pool為一個管理單元,來管理自己的Block。

在聯邦HDFS中,每個Namespace都有自己的Block管理,但這些Block全部存放在整個DataNode集群中,如上圖所示,Namespace之間是相互隔離的,即使一個NameNode節點宕機,也不會影響到其他NameSpace,同也不會影響到其管理的Datanodes中的Block。

優勢:

(1)可以做到自由的橫向無限制擴充DataNode節點。

(2)可以實現多個NameNode并發執行任務,提高HDFS系統的吞吐量

(3)安全性得到很大的提示,單個NameNode節點的崩潰不會導致整個系統的癱瘓。

1.2 ?MapReduce之間的區別

1.2.1 ?Hadoop1.x

Hadoop1.x運行MapReduce任務的流程為:

(1)Job Client提交任務給JobTracker(NameNode節點中),JobTracker向各個節點發出詢問請求,查看每個DataNode節點中執行的Task(任務)的個數

(2)JobTrack收集DataNodes的信息,并Job進行資源分配

(3)將MapReduce任務所需的資源、信息等全部復制到Datanodes節點中。

(4)DataNode節點接受任務后,將本地的Block讀取,并形成相應的Map和Reduce任務,這些任務的管理全部由DataNodes節點中的TaskTracker進行監督。如圖3,MapReduce示意圖所示。

wKiom1cYPdPw6cmFAAD0zgJ6bdM480.png?

圖3 ?MapReduce示意圖

從圖中可知,JobTacker是整個Hadoop1.x MapReduce框架的中心,其承擔的任務有:接受任務、計算資源、分配資源、與DataNode進行交流等功能。Hadoop1.x 框架在發布時收到很大的歡迎,但是隨著需求越來越大,Hadoop1.x 的MapReduce(MapReduce v1)已經不能夠勝任現在的需求,主要表現在以下幾個問題:

(1)JobTracker是整個MapReduce v1的核心,存在單點故障

(2)JobTracker管理整個MapReduce作業的任務,造成資源消耗,當map/reduce task過多的時候,JobTracker將會耗費大量內存,同時也增加Job?Tracker fail的風險。

(3)JobTracker對DataNode進行資源詢,使用的Task的個數,為考慮內存和CPU的使用率等,如果將兩個大內存的Map/reduce Task放在一個節點上執行,可能會出現內存溢出。

(4)代碼層中的類有些超過3000行,導致整個類的任務不夠明確,并且進行修改是任務量也巨大,因此增加了維護、開發人員進行修改的難度。

1.2.2 ?Hadoop2.x

為了應對越來越大的需求,已經MapReduce v1的弊端,Apache對MapReduce v2進行了重新設計,出現了MapReduce v2,也就是YARN框架。下面介紹一下YARN框架。如圖4,YARN示意圖所示。

wKiom1cYPf_Q_yO4AAD-YDPz6LQ932.png

?

wKioL1cYPs-Tb9ZLAADF9TfoMT0144.png

圖4 ?YARN示意圖

名詞解釋:

ResourceManager:以下簡稱RM。YARN的中控模塊,負責統一規劃資源的使用。

NodeManager:以下簡稱NM。YARN的資源結點模塊,負責啟動管理container。

ApplicationMaster:以下簡稱AM。YARN中每個應用都會啟動一個AM,負責向RM申請資源,請求NM啟動container,并告訴container做什么事情。

Container:資源容器。YARN中所有的應用都是在container之上運行的。AM也是在container上運行的,不過AM的container是RM申請的。

(1)ResourceManager:在MapReduce v1中,JobTracker的任務有兩個:資源管理和任務調度。而在YARN框架中,將JobTracker的兩個核心任務進行分離,其中的資源管理形成新的ResourceManager。ResourceManager負責管理每個NodeManager節點所提供的資源狀態(內存、CPU、磁盤和帶寬等傳統信息)。在MapReduce任務的時候,RM會精確計算每個整個集群的資源情況,已分配給該任務合適的資源。

(2)Container:對一個節點的內存、CPU等資源的描述的整體描述。

(3)ApplicationMaster:每一個MapReduce任務都對應著一個AM,AM負責向ResourceManager索要執行任務所需要的資源容器,根據進程的狀態、管理進行和處理進程失敗的原因。

(4)NodeManager:是一個機器框架的代理,是任務執行的容器,其管理節點的諸多信息:例如內存、CPU、硬盤、網絡等資源。

YARN相對于MapReduce v1的優勢:

(1)JobTracker所承擔的龐大負擔被分割,分成了resourceManager和nodemanager。資源管理和任務調度分配在不同的節點,并且實現程序的分布化、最優化

(2)ResourceManager資源分配不再憑借slot的個數,而是根據節點的內存是分配任務,使得負載均衡更在完善

(3)ResourceManager節點上有一個ApplicationMasters進程,負責管理每個ApplicationMatser進程的狀態,從而實現監督任務。

1.3 ?其它差異

MapReduce變成了和HBase和Hive等一樣的YARN上面的一個應用;Hadoop1.x的默認塊大小為64M,Hadoop2.x的默認塊大小為128M在2.x中除了datanode要向namenode報告status,nodemanager也要向ResourceManager報告status

二、 Hadoop1.x升級Hadoop2.x實現

版本情況:老版本Hadoop1.0.3;新版本Hadoop2.6.4。

HOST信息:

wKiom1cYPoWT6UIGAAAqLCTEUns975.png

升級所需下載安裝包:

hadoop-2.6.4.tar.gz?http://apache.opencas.org/hadoop/common/hadoop-2.6.4/hadoop-2.6.4.tar.gz

jdk-8u77-linux-x64.tar.gz:官網下載

包的放置路徑:/usr/local/src/

創建新的HDFS系統目錄和測試文件:

[root@namenode ~]#?hadoop fs -mkdir /test

[root@namenode ~]#?hadoop fs -put /home/hadoop/hadoop/conf/* ?/test/

wKioL1cYP5yC-WvNAABYni8hb0g096.png

解壓jdk安裝包(每個節點都要操作):

[root@namenode ~]#?cd /usr/local/src

[root@namenode ~]#tar zxvf jdk-8u77-linux-x64.tar.gz


備份舊的jdk(每個節點都要操作):

[root@namenode ~]#mv ?/usr/local/jdk1.6 ?/usr/local/jdk1.6.bak

替換新的jdk版本(每個節點都要操作):

[root@namenode ~]#mv ?jdk1.8.0_77 /usr/local/jdk/

修改jdk環境(每個節點都要操作):

[root@namenode ~]#vim /etc/profile

更改JAVA_HOME

export JAVA_HOME=/usr/local/jdk

export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$PATH:$JAVA_HOME/bin


[root@namenode ~]#source /etc/profile

驗證jdk是否成功:

[root@namenode ~]#java –version


2.2 ?namenode節點操作

解壓hadoop2.6的包:

[root@namenode ~]#tar zxvf?hadoop-2.6.4.tar.gz

備份hadoop1.0(每個節點都操作):

[root@namenode ~]#mkdir /home/hadoop/backup

[root@namenode~]#mv?/home/hadoop/hadoop?/home/hadoop/backup/

備份好集群namenode的元數據(${HADOOP_HOME}/conf/hdfs-site.xml中的dfs.name.dir所配置的文件夾):

[root@namenode ~]#cp?r /data/work/hdfs/name /data/backup/hdfsname.20160418.bak

安裝hadoop2.6:

[root@namenode ~]#mv /usr/local/src/hadoop-2.6.4 /home/hadoop/hadoop

[root@namenode ~]#chown -R hadoop.hadoop /home/hadoop/hadoop


切換到hadoop用戶:

[root@namenode ~]#su – hadoop

????

修改用戶環境(每個節點都操作):

[hadoop@namenode ~]$vim /home/hadoop/.bash_profile

修改:

export HADOOP_HOME=/home/hadoop/hadoop

export PATH=$PATH:$HADOOP_HOME:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

export HADOOP_HOME_WARN_SUPPRESS=1

export PATH

[hadoop@namenode ~]$source?/home/hadoop/.bash_profile

p8

2.3 ?修改配置文件

[hadoop@namenode ~]$cd /home/hadoop/hadoop/etc/hadoop/

[hadoop@hadoop/?~]$vim hadoop-env.sh

修改export JAVA_HOME=/usr/local/jdk

增加export HADOOP_PREFIX=/home/hadoop/hadoop

????export HADOOP_HEAPSIZE=15000

[hadoop@hadoop/?~]$vim yarn-env.sh

修改export JAVA_HOME=/usr/local/jdk

[hadoop@hadoop/?~]$vim mapred-env.sh

修改export JAVA_HOME=/usr/local/jdk


[hadoop@hadoop/?~]$vim?hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

??<property>

????????<name>dfs.namenode.http-address</name>

????????<value>namenode:50070</value>

????????<description> NameNode?通過當前參數 獲得?fsimage?和?edits </description>

??</property>

??<property>

????????<name>dfs.namenode.secondary.http-address</name>

????????<value>node2:50090</value>

????????<description> SecondNameNode?通過當前參數 獲得最新的?fsimage </description>

????</property>

?

????<property>

????????<name>dfs.replication</name>

????????<value>2</value>

????????<description>?設定?HDFS?存儲文件的副本個數,默認為3 </description>

????</property>

???<property>

????????<name>dfs.namenode.checkpoint.dir</name>

????????<value>file:///home/hadoop/hadoop2.2/hdfs/namesecondary</value>

????????<description>?設置?secondary?存放 臨時鏡像 的本地文件系統路徑,如果這是一個用逗號分隔的文件列表,則鏡像將會冗余復制到所有目錄,只對?secondary?有效?</description>

????</property>

?

????<property>

????????<name>dfs.webhdfs.enabled</name>

????????<value>true</value>

????</property>

????<property>

????????<name>dfs.namenode.name.dir</name>

????????<value>file:///data/work/hdfs/name/</value>

????????<description> namenode?用來持續存放命名空間和交換日志的本地文件系統路徑?</description>

????</property>

?

????<property>

????????<name>dfs.datanode.data.dir</name>

????????<value>file:///data/work/hdfs</value>

????????<description> DataNode?在本地存放塊文件的目錄列表,用逗號分隔?</description>

????</property>

????<property>

????????<name>dfs.stream-buffer-size</name>

????????<value>131072</value>

????????<description>?默認是4KB,作為hadoop緩沖區,用于hadoophdfs的文件和寫

hdfs的文件,還有map的輸出都用到了這個緩沖區容量,對于現在的硬件很保守,可以設置為128k

(131072),甚至是1M(太大了mapreduce任務可能會內存溢出) </description>

????</property>

????<property>

????????<name>dfs.namenode.checkpoint.period</name>

????????<value>3600</value>

????????<description>?兩次?checkpoints?之間的間隔,單位為秒,只對?secondary?有效?</description>

????</property>

</configuration>


[hadoop@hadoop/?~]$vim?mapred-site.xml

<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>

?<name>mapreduce.framework.name</name>

?<value>yarn</value>

</property>

</configuration>


[hadoop@hadoop/?~]$vim?yarn-site.xml

<?xml version="1.0"?>

<configuration>

<property>

??<name>yarn.nodemanager.aux-services</name>

??<value>mapreduce_shuffle</value>

</property>

</configuration>


[hadoop@hadoop/?~]$vim?core-site.xml

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>

???<name>fs.defaultFS</name>

???<value>hdfs://namenode:9000/</value>

???<description>?設定?namenode?的 主機名 及 端口?</description>

</property>

?

<property>

???<name>hadoop.tmp.dir</name>

???<value>/home/hadoop/tmp</value>

???<description>?存放臨時文件的目錄?</description>

</property>

</configuration>

新建文件目錄(所有節點操作)

$mkdir /home/hadoop/tmp

$mkdir?/data/work/hdfs/namesecondary/

$chown -R hadoop.hadoop??/home/hadoop/tmp/

$?chown -R hadoop.hadoop??/data/work/hdfs/namesecondary/

啟動hdfs

[hadoop@namenode ~]$tart-dfs.sh

[hadoop@namenode ~]$hadoop-daemon.sh start namenode -upgrade

重新啟動所有守護線程

[hadoop@namenode ~]$stop-dfs.sh

[hadoop@namenode ~]$start-all.sh

查看元數據是否成功保留

[hadoop@namenode ~]$hadoop fs -ls /

wKioL1cYQlWwkRCYAAA6M4VMSh8118.png


成功之后停掉所有守護進程

[hadoop@namenode ~]$stop-all.sh


修改/home/hadoop/hadoop/etc/hadoop/slaves

[hadoop@namenode ~]$vim slaves

修改:

node1

node2


hadoop文件拷貝給其它節點

[hadoop@namenode ~]$scp -r /home/hadoop/hadoop node2:/home/hadoop/hadoop/

[hadoop@namenode ~]$scp -r /home/hadoop/hadoop node1:/home/hadoop/hadoop/


Node1,2節點修改hadoop的目錄權限

$chown -R hadoop.hadoop /home/hadoop/hadoop


namenode啟動守護線程

[hadoop@namenode ~]$start-all.sh


namenode和datanode的dfs.namenode.name.dir目錄下(本次實驗中為/data/work/hdfs/name)會多出一個文件夾previous/或者通過jps查看信息

文件夾previous/,這是升級之前數據的備份,如果回滾也是需要有這個文件夾。




? ? ? 本文轉自YU文武貝 51CTO博客,原文鏈接:http://blog.51cto.com/linuxerxy/1766131,如需轉載請自行聯系原作者






本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/454078.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454078.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454078.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

本頁由試用版打印控件lodop6.2.6輸出_Visual Basic 6.0 Sirk 迷你版

Visual Basic 6.0 Sirk 迷你版 VB6 Sirk Mini 2019更新1、支持主流操作系統&#xff0c;避免原版安裝失敗的問題&#xff1a;支持Windows XP、Vista、Win7、Win8、Win10(32位、64位)。2、保留大部分常用功能&#xff0c;避免精簡版過度精簡&#xff1a;包含原版完整控件&#x…

深度學習之卷積神經網絡 LeNet

卷積神經網絡典型CNN LeNet&#xff1a;最早用于數字識別的CNNLeNet5&#xff1a;現在常說的一般就是LeNet5AlexNet&#xff1a;2012ILSVRC冠軍&#xff0c;遠超第二名的CNN&#xff0c;比LeNet更深&#xff0c;用多層小卷積疊加來替換單個的大卷積ZF Net&#xff1a;2013ILSV…

python爬蟲常見反爬措施_爬蟲常見的反爬措施有哪些

爬蟲常見的反爬措施有三種&#xff1a;1、header頭部信息解決方法&#xff1a;加User-Agent值&#xff1a;如果不加header頭&#xff0c;部分網站服務器判斷不到用戶的訪問來源&#xff0c;所以會返回一個404錯誤來告知你是一個爬蟲&#xff0c;拒絕訪問&#xff0c;解決辦法如…

dom4j的讀寫xml文件,讀寫xml字符串

百度了一些博客&#xff0c;大同小異&#xff0c;在選取jar包工具的時候大概看了下&#xff0c;大抵是jdom原始&#xff0c;dom4j優秀。于是做了些練習。 參考&#xff1a;http://www.cnblogs.com/mengdd/archive/2013/06/05/3119927.html 1 package com.test.xml;2 3 import j…

深度學習之數據增強方案和TensorFlow操作

一、數據增強的方法介紹 增加訓練數據&#xff0c; 則能夠提升算法的準確率&#xff0c; 因為這樣可以避免過擬合&#xff0c; 而避免了過擬合你就可以增大你的網絡結構了。 當訓練數據有限的時候&#xff0c; 可以通過一些變換來從已有的訓練數據集中生成一些新的數據&#x…

移動前端頭部標簽(HTML5 head meta)

<!DOCTYPE html> <!-- 使用 HTML5 doctype&#xff0c;不區分大小寫 --> <html lang"zh-cmn-Hans"> <!-- 更加標準的 lang 屬性寫法 http://zhi.hu/XyIa --> <head><!-- 聲明文檔使用的字符編碼 --><meta charsetutf-8>&l…

python新建文件夾口令_python編程快速上手—口令保管箱

之前小編為大家整理了如何成為一個優秀的程序員應該具備的品質&#xff0c;接下來為大家展示一個簡單有趣的python小項目&#xff0c;從中體會編程的樂趣。小編了解這個小項目之后&#xff0c;很是驚奇&#xff0c;覺得python竟然還可以做這樣的事情。為什么要建立口令保管箱&a…

django+nginx+uwsgi部署web站點

環境&#xff1a; django&#xff1a;1.8.16 python&#xff1a;2.7.13 pip&#xff1a;2.7 uwsgi&#xff1a;2.0.15 project路徑&#xff1a; /opt/cmdb/ Uwsgi的安裝配置 1、安裝python2.7 &#xff08;省略安裝過程&#xff09; 2、安裝pip2.7 &#xff08;省略安裝過程&…

GCC源代碼閱讀

獲取GCC源代碼 閱讀源代碼的第一步是獲取源代碼&#xff0c;巧婦難為無米之炊嘛&#xff01; 使用以下任意方法均可獲得gcc源代碼&#xff1a; svn checkout svn://gcc.gnu.org/svn/gcc/trunk SomeLocalDir &#xff08;摘自http://gcc.gnu.org/svn.html&#xff09;git clone …

Nginx 動靜分離

頁面動靜分離 后端 調用tomcat 集群 示例&#xff1a; server { listen 80; server_name www.www2.com ; root /web/www2/htmlloation /img/ {alias /web/www2/html/img/;}location ~ (\.jsp)|(\.do)$ {proxy_pass http:## //serverip:port;proxy_redirect off;// 重定向 指…

Linux 狀態命令之內存狀態 vmstat

語法 vmstat 常見命令格式如下&#xff1a; vmstat [-a] [-n] [-S unit] [delay [ count]] vmstat [-s] [-n] [-S unit] vmstat [-m] [-n] [delay [ count]] vmstat [-d] [-n] [delay [ count]] vmstat [-p disk partition] [-n] [delay [ count]] vmstat [-f] vmstat [-V]命…

使用OpenSSL實現CA證書的搭建過程

個人博客地址&#xff1a;http://www.pojun.tech/ 歡迎訪問 什么是CA CA,Catificate Authority,通俗的理解就是一種認證機制。它的作用就是提供證書&#xff08;也就是服務端證書&#xff0c;由域名&#xff0c;公司信息&#xff0c;序列號&#xff0c;簽名信息等等組成&#…

最近公共祖先 python_求二叉搜索樹的最近公共祖先

給定一個二叉搜索樹, 找到該樹中兩個指定節點的最近公共祖先。百度百科中最近公共祖先的定義為&#xff1a;“對于有根樹 T 的兩個結點 p、q&#xff0c;最近公共祖先表示為一個結點 x&#xff0c;滿足 x 是 p、q 的祖先且 x 的深度盡可能大(一個節點也可以是它自己的祖先)。”…

gdb使用實例

第一篇 概論我們將學習使用gdb來調試通過一個通過串行線同PC相連的嵌入式系統。Gdb可以調試各種程序&#xff0c;包括C、C、JAVA、PASCAL、FORAN和一些其它的語言。包括GNU所支持的所有微處理器的匯編語言。在gdb的所有可圈可點的特性中&#xff0c;有一點值得注意&#xff0c;…

Linux 監控命令之 netstat

netstat命令用于顯示與IP、TCP、UDP和ICMP協議相關的統計數據&#xff0c;一般用于檢驗本機各端口的網絡連接情況。netstat是在內核中訪問網絡及相關信息的程序&#xff0c;它能提供TCP連接&#xff0c;TCP和UDP監聽&#xff0c;進程內存管理的相關報告。 語法 netstat [-acC…

C#遞歸搜索指定目錄下的文件或目錄

來源&#xff1a;https://www.cnblogs.com/huhangfei/p/5012978.html誠然可以使用現成的Directory類下的GetFiles、GetDirectories、GetFileSystemEntries這幾個方法實現同樣的功能&#xff0c;但請相信我不是蛋疼&#xff0c;原因是這幾個方法在遇上【System Volume Informati…

solr 配置

創建 SolrHome(solrCore) 1.解壓 solr-4.10.4.tgz 到 /usr/local/solr 2.將 solr-4.10.4/example/solr 下所有文件拷貝到 /usr/local/solrhome (此 solrhome 為自己創建的) solrhome 是 solr 運行主目錄&#xff0c;可包含多個 SolrCore 目錄SolrCore 目錄中包含運行 Solr 實例…

mfc程序轉化為qt_10年程序員:我都學過這些語言,2019年開始我再也不是程序員......

為什么學編程2008年&#xff0c;高中畢業的我問一個已經工作兩年的親戚&#xff1a;什么專業工資高&#xff1f;他告訴我&#xff1a;程序員。2008年成都最低工資好像是800元&#xff0c;我的生活費也是800元&#xff0c;據他所說程序員出來的工資是2000&#xff0c;于是開始了…

day 7 引用

1.ba在c語言和python中的區別 c語言&#xff1a;a100 a變量里面放的100 b a b變量里面也放的100 python &#xff1a; a100 內存中有個100 a放的100的內存地址 b a b也放的100的內存地址 相當于給100那一塊內存&#xff0c;貼個便利簽 2.type查看數據類型&…

Dapper逆天入門~強類型,動態類型,多映射,多返回值,增刪改查+存儲過程+事物案例演示...

Dapper的牛逼就不扯蛋了&#xff0c;答應群友做個入門Demo的&#xff0c;現有園友需要&#xff0c;那么公開分享一下&#xff1a; 完整Demo&#xff1a;http://pan.baidu.com/s/1i3TcEzj 注 意 事 項&#xff1a;http://www.cnblogs.com/dunitian/p/5221058.html 平臺之大勢何人…